home *** CD-ROM | disk | FTP | other *** search
/ Apple Reference & Presen…rary 6 (Reseller Edition) / Apple Ref. & Pres. Lib.v6.0.toast / mac / 2-Graphics / Apple Graphics Source / Apple Graphics Source 3.0 / background_2703.txt < prev    next >
Text File  |  1990-08-07  |  121KB  |  3,653 lines

  1. -- background: 2703 from stack: in.0
  2. -- bmap block id: 3276
  3. -- flags: 4000
  4. -- background id: 0
  5. -- name: The Collection
  6. ----- HyperTalk script -----
  7. --‚Ä¢‚Ä¢ SYSTEM MESSAGES
  8.  
  9. on openBackground
  10.   global firstTimeAGS,artManagement
  11.   if artManagement then admin else closeAdmin
  12.   setLibraryButtons
  13.   if firstTimeAGS is empty then
  14.     set cursor to watch
  15.     send mouseUp to bg btn "graphics view"
  16.     checkDocuments
  17.     initializeVars
  18.     put 1 into firstTimeAGS
  19.   end if
  20.   if hilite of bg btn "help" then set hilite of bg btn "help" to false
  21. end openBackground
  22.  
  23. on openCard
  24.   global listScroll,currentView
  25.   setCdNo
  26.   if cantModify of this stack then setView
  27.   if currentView is "lists view" then
  28.     fillInFields
  29.     set scroll of fld "list" to listScroll
  30.   end if
  31.   unlock screen
  32. end openCard
  33.  
  34. on closeCard
  35.   global listScroll
  36.   lock screen
  37.   put the scroll of fld "list" into listScroll
  38. end closeCard
  39.  
  40. --‚Ä¢ MESSAGE HANDLERS
  41.  
  42. on setLibraryButtons
  43.   get cd fld "Library title" of cd "Title card"
  44.   if the number of words in it < 2 then exit setLibraryButtons
  45.   get word 1 of it
  46.   if it is not "Hardware" then set hilite of bg btn "Hardware" to false
  47.   if it is not "Technical" then set hilite of bg btn "Technical" to false
  48.   if it is not "Networks" then set hilite of bg btn "Networks" to false
  49.   if hilite of bg btn it is false then  set hilite of bg btn it to true
  50. end setLibraryButtons
  51.  
  52. on goStack whichStack
  53.   global findParams,lastFindTerms
  54.   dialogIt "Sorry. This version contains hardware graphics only."
  55.   exit goStack
  56.   if the hilite of bg btn whichStack then exit goStack
  57.   set lockMessages to true
  58.   set lockRecent to true
  59.   lock screen
  60.   put the long name of this stack into startStack
  61.   go stack "Apple Graphics - " & whichStack
  62.   if the long name of this stack is startStack then
  63.     -- You clicked cancel and didn't leave the original stack
  64.     exit goStack
  65.   end if
  66.   go bg "the collection"
  67.   unlock screen with visual effect dissolve
  68.   openBackground
  69.   openCard
  70.   put empty into findParams
  71.   put empty into lastFindTerms
  72. end goStack
  73.  
  74. -- The next couple of handlers manage the paths to the graphics. This
  75. -- is critical since DispPict and TinyPict use the paths stored in the
  76. -- paths field on the Documents card of the Home path to find a given
  77. -- graphic file.
  78.  
  79. on updateDocuments newPaths
  80.   --Updates the global documents. The newPaths parameter is optional,
  81.   --and is paths that need to be added to the Documents card in the
  82.   --Home stack.
  83.   global documents
  84.   if cantModify of this stack then exit updateDocuments
  85.   lock screen
  86.   set lockRecent to true
  87.   set lockMessages to true
  88.   push cd
  89.   go home
  90.   go cd "documents"
  91.   if the result is not empty then
  92.     --the Documents card in the Home stack doesn't appear to exist.
  93.     dialogIt "The stack is having trouble locating the" && "Documents card in the Home stack. Consequently, the stack" && "may have trouble finding the original graphics."
  94.     pop cd
  95.     exit updateDocuments
  96.   else
  97.     --the Documents card in the Home stack was found.
  98.     if newPaths is NOT empty then
  99.       put newPaths into line (the number of lines in fld "paths" + 1) of fld "paths"
  100.     end if
  101.   end if
  102.   put fld "paths" into documents
  103.   pop cd
  104. end updateDocuments
  105.  
  106. on checkDocuments newPaths
  107.   --Checks the document paths in this stack against the global
  108.   --Documents. Discrepencies are put into newPaths and sent to the
  109.   --handler updateDocuments to be added to the Documents card in the
  110.   --Home stack. NewPaths is optional, and allows you to add paths to
  111.   --the storage field in this stack.
  112.   global documents
  113.   put cd fld "paths to graphics" of cd "Index storage" into existPaths
  114.   if newPaths is not empty then
  115.     repeat with N = 1 to the number of lines in newPaths
  116.       if not isWithin(line N of newPaths,existPaths) then
  117.         put line N of newPaths into line (the number of lines in existPaths + 1) of existPaths
  118.       end if
  119.     end repeat
  120.     put existPaths into cd fld "paths to graphics" of cd "Index storage"
  121.   end if
  122.   put empty into newPaths
  123.   repeat with N = 1 to the number of lines in existPaths
  124.     if not isWithin(line N of existPaths,documents) then
  125.       put line N of existPaths into line (the number of lines in newPaths + 1) of newPaths
  126.     end if
  127.   end repeat
  128.   if newPaths is not empty then updateDocuments newPaths
  129. end checkDocuments
  130.  
  131. --‚Ä¢ MENU SCRIPTS
  132.  
  133. on buildMenus
  134.   buildCatalogMenu
  135.   buildIndexesMenu
  136.   buildManagementMenu
  137.   buildCardMenu
  138. end buildMenus
  139.  
  140. on buildCatalogMenu
  141.   global catalogMenu
  142.   put empty into catalogMenu
  143.   put "Catalog Folder‚Ķ" & return after catalogMenu
  144.   put "Catalog File‚Ķ" & return after catalogMenu
  145.   if cantModify of this stack then
  146.     repeat with i = 1 to the number of lines in catalogMenu
  147.       put "(" before line i of catalogMenu
  148.     end repeat
  149.   end if
  150. end buildCatalogMenu
  151.  
  152. on buildIndexesMenu
  153.   global indexesMenu
  154.   put empty into indexesMenu
  155.   put "Build All Indexes" & return after indexesMenu
  156.   put "(-" & return after indexesMenu
  157.   put "Build Keyword Index" & return after indexesMenu
  158.   put "Add to Keyword Index‚Ķ" & return after indexesMenu
  159.   put "Delete from Keyword Index‚Ķ" & return after indexesMenu
  160.   put "Export Keyword Index" & return after indexesMenu
  161.   put "(-" & return after indexesMenu
  162.   put "Build Book Index" & return after indexesMenu
  163.   put "Add to Book Index‚Ķ" & return after indexesMenu
  164.   put "Delete from Book Index‚Ķ" & return after indexesMenu
  165.   put "Export Book Index" & return after indexesMenu
  166.   put "(-" & return after indexesMenu
  167.   put "Build File Name Index" & return after indexesMenu
  168.   put "Build File Format Index" & return after indexesMenu
  169.   if cantModify of this stack then
  170.     repeat with i = 1 to the number of lines in indexesMenu
  171.       put "(" before line i of indexesMenu
  172.     end repeat
  173.   end if
  174. end buildIndexesMenu
  175.  
  176. on buildManagementMenu
  177.   global managementMenu
  178.   put empty into managementMenu
  179.   put "Import Data‚Ķ" & return after managementMenu
  180.   put "Delete Data" & return after managementMenu
  181.   put "(-" & return after managementMenu
  182.   put "Set Browsing Speed‚Ķ" & return after managementMenu
  183.   put "Sort by File Name" & return after managementMenu
  184.   put "Print Cards from Book‚Ķ" & return after managementMenu
  185.   if cantModify of this stack then
  186.     repeat with i = 1 to the number of lines in managementMenu
  187.       put "(" before line i of managementMenu
  188.     end repeat
  189.   end if
  190. end buildManagementMenu
  191.  
  192. on buildCardMenu
  193.   global cardMenu
  194.   put empty into cardMenu
  195.   put "Build Thumbnail" & return after cardMenu
  196.   put "Format Description" & return after cardMenu
  197.   put "(-" & return after cardMenu
  198.   put "Assign Keyword‚Ķ" & return after cardMenu
  199.   put "Delete Keyword‚Ķ" & return after cardMenu
  200.   put "(-" & return after cardMenu
  201.   put "Assign Book‚Ķ" & return after cardMenu
  202.   if cantModify of this stack then
  203.     repeat with i = 1 to the number of lines in cardMenu
  204.       put "(" before line i of cardMenu
  205.     end repeat
  206.   end if
  207. end buildCardMenu
  208.  
  209. on sortCards
  210.   if not the lockMessages then
  211.     answer "Sort graphics by File Name?" with Cancel or OK
  212.     if it is "cancel" then exit sortCards
  213.   end if
  214.   put "Sorting cards ‚Ķ"
  215.   toggleLockScreen
  216.   push cd
  217.   set cursor to busy
  218.   get the number of this bg
  219.   sort by backgroundSort(it)
  220.   put empty
  221.   pop cd
  222. end sortCards
  223.  
  224. on changeView whichView
  225.   global currentView,listScroll
  226.   set cursor to watch
  227.   lock screen
  228.   if whichView is "lists view" then
  229.     put true into boolean
  230.     put "lists view" into currentView
  231.     put "iris close" into theEffect
  232.     showListName
  233.     fillInFields
  234.     set scroll of fld "list" to listScroll
  235.   else
  236.     put false into boolean
  237.     put "graphics view" into currentView
  238.     put "iris open" into theEffect
  239.   end if
  240.  
  241.   -- ABOUT THIS GRAPHIC view
  242.   set visible of bg btn "description:" to not boolean
  243.   set visible of fld "description field" to not boolean
  244.   set visible of bg btn "format:" to not boolean
  245.   set visible of fld "format field" to not boolean
  246.   set visible of bg btn "file name:" to not boolean
  247.   set visible of fld "file name field" to not boolean
  248.   set visible of bg btn "keywords:" to not boolean
  249.   set visible of fld "keywords field" to not boolean
  250.   set visible of bg btn "appears in books:" to not boolean
  251.   set visible of fld "appears in books field" to not boolean
  252.   set visible of bg btn "info blanket" to not boolean
  253.   set visible of bg btn "Hardware" to not boolean
  254.   set visible of bg btn "Technical" to not boolean
  255.   set visible of bg btn "Networks" to not boolean
  256.  
  257.   -- LISTS view
  258.   set visible of bg btn id 353 to boolean
  259.   --the name of the open list
  260.   set visible of fld "list" to boolean
  261.   set visible of bg btn "new list" to boolean
  262.   set visible of bg btn "open list‚Ķ" to boolean
  263.   set visible of bg btn "save" to boolean
  264.   set visible of bg btn "delete list‚Ķ" to boolean
  265.   set visible of bg btn "print list‚Ķ" to boolean
  266.   set visible of bg btn "add this graphic" to boolean
  267.   set visible of bg btn "delete #‚Ķ" to boolean
  268.   deleteEntryVisible false
  269.   setBtnHilites
  270.   unlock screen with visual effect theEffect
  271. end changeView
  272.  
  273. on setBtnHilites
  274.   global currentView
  275.   if currentView is "lists view" then put true into boolean
  276.   else put false into boolean
  277.   set hilite of bg btn "lists view" to boolean
  278.   set hilite of bg btn "graphics view" to not boolean
  279. end setBtnHilites
  280.  
  281. on deleteEntryVisible boolean
  282.   if boolean then
  283.     put "Click an entry to remove it from the list." into fld "delete msg"
  284.   else
  285.     set hilite of bg btn "done" to true
  286.     set hilite of bg btn "done" to false
  287.   end if
  288.   lock screen
  289.   if not boolean then put empty into fld "delete msg"
  290.   --set visible of bg btn id 407 to boolean
  291.   set visible of bg fld "delete msg" to boolean
  292.   set visible of bg btn "done" to boolean
  293.   unlock screen
  294. end deleteEntryVisible
  295.  
  296. on showNew newGraphics,text
  297.   put sortContainer(newGraphics) into theList
  298.   get listDialog(theList,13,text,"No","OK")
  299. end showNew
  300.  
  301. on showExisting theList
  302.   put "These cards already existed and weren't added." into text
  303.   get listDialog(theList,13,text,"No","OK",601)
  304. end showExisting
  305.  
  306. on showHelp boolean
  307.   lock screen
  308.   set the showPict of this card to not(boolean)
  309.   set the visible of fld "banner" to boolean
  310.   set the visible of bg btn "Help Section" to boolean
  311.   set the visible of bg btn "Help Close" to boolean
  312.   set the hilite of bg btn "Help" to boolean
  313.   if boolean then unlock screen with zoom open
  314.   else
  315.     put empty into fld "banner"
  316.     unlock screen with zoom close
  317.   end if
  318. end showHelp
  319.  
  320. on setView
  321.   global currentView
  322.   if currentView is "ags lists" then
  323.     send mouseUp to bg btn "lists view"
  324.     showListName
  325.   else send mouseUp to bg btn "graphics view"
  326. end setView
  327.  
  328. on removeCdPict
  329.   put the tool into toolStatus
  330.   choose select tool
  331.   doMenu "select all"
  332.   doMenu "clear picture"
  333.   choose toolStatus
  334. end removeCdPict
  335.  
  336. on controlKey whichKey
  337.   -- keyboard shortcuts using the control key.
  338.   -- whichKey is the ASCII code for the key hit with the control key
  339.  
  340.   -- 1 is the letter a.
  341.   if whichKey = 1 then send mouseUp to bg btn "add this graphic"
  342.  
  343.   -- 4 is the letter d.
  344.   if whichKey = 4 then
  345.     deleteFromCard "keyword","keywords field","Keyword Index","keyword pointer"
  346.   end if
  347.  
  348.   -- 4 is the letter f.
  349.   if whichKey = 6 then
  350.     put formatDescription(bg fld "description field") into bg fld "description field"
  351.   end if
  352.  
  353.   -- 11 is the letter k.
  354.   if whichKey = 11 then
  355.     assignToCard "keyword","keywords field","Keyword Index","keyword pointer"
  356.   end if
  357.   pass controlKey
  358. end controlKey
  359.  
  360. on initializeVars
  361.   global listScroll,taggedList,changesToList,activeListName, ticksToWait,listStack,lastWindow,displayOrPrint,entrySuffix, entryPrefix,tryServers
  362.   put false into changesToList
  363.   put 0 into listScroll
  364.   put empty into taggedList
  365.   put "Untitled" into activeListName
  366.   put "     | " into entryPrefix
  367.   put ". | " into entrySuffix
  368.   put cd fld "browsing speed" of cd "Index storage" into ticksToWait
  369.   if ticksToWait = empty then put 0 into ticksToWait
  370.   put "Graphics Database Lists" into listStack
  371.   put "5,21,484,291" into lastWindow
  372.   put "1" into displayOrPrint
  373.   if cantModify of this stack then put false into tryServers
  374.   else put true into tryServers
  375. end initializeVars
  376.  
  377. on adminElements boolean
  378.   set cursor to watch
  379.   lock screen
  380.   buildMenus
  381.   put developerBtns() into theBtns
  382.   if boolean then
  383.     put "barn door open" into theEffect
  384.     repeat with N = 1 to the number of items in theBtns
  385.       set hilite of bg btn (item N of theBtns) to false
  386.     end repeat
  387.   else put "barn door close" into theEffect
  388.   repeat with N = 1 to the number of items in theBtns
  389.     set visible of bg btn (item N of theBtns) to boolean
  390.   end repeat
  391.   if boolean AND the loc of cd window = "0,0" then hide menubar
  392.   else show menubar
  393.   unlock screen with theEffect
  394. end adminElements
  395.  
  396. on fillInFields
  397.   global taggedList
  398.   put taggedList into bg fld "list"
  399. end fillInFields
  400.  
  401. on setCdNo
  402.   put bgCard() into bgCard
  403.   set the name of bg btn id 216 to bgCard && "of" && (the number of cds in this bg)
  404. end setCdNo
  405.  
  406. --‚Ä¢‚Ä¢ GRAPHICS scripts
  407.  
  408. on displayPicture
  409.   global lastWindow, displayOrPrint,tryServers
  410.   set cursor to busy
  411.   show menuBar
  412.   put item 1 of lastWindow into left
  413.   put item 2 of lastWindow into top
  414.   put item 3 of lastWindow into right
  415.   put item 4 of lastWindow into bottom
  416.   if tryServers then mountFileServer
  417.   lock screen
  418.   set lockRecent to true
  419.   set lockMessages to true
  420.   if cantModify of this stack then put buildPicturePath() into fileName
  421.   else put fld "file name field" into fileName
  422.   DispPICT fileName,displayOrPrint,1,left,top,right,bottom,0,0,0
  423.   put the result into XCMDanswer
  424.   -- the result is either the coordinates of the graphic window when it was
  425.   -- closed or an error message
  426.   if xcmdAnswer contains "error" then
  427.     dispPictError "displayPicture",xcmdAnswer,fileName
  428.   else put xcmdAnswer into lastWindow
  429.   openCard
  430. end displayPicture
  431.  
  432. on displayTiny whichPath
  433.   global tryServers
  434.   set cursor to watch
  435.   if tryServers then mountFileServer
  436.   if whichPath = empty then put fld "file name field" into whichPath
  437.   set lockMessages to true
  438.   set lockRecent to true
  439.   tinyPICT whichPath,200,200
  440.   put the result into xcmdAnswer
  441.   if xcmdAnswer contains "error" then
  442.     dispPictError "displayTiny",xcmdAnswer,whichPath
  443.     openCard
  444.     return xcmdAnswer
  445.     exit displayTiny
  446.   end if
  447.   if cardPictureExists() then
  448.     dialogIt "Replace the existing thumbnail for this card?","No,Yes"
  449.     if the result = "No" then exit displayTiny
  450.   end if
  451.   lock screen
  452.   choose select tool
  453.   drag from 0,0 to 300,300
  454.   doMenu "Clear Picture"
  455.   type "V" with commandKey
  456.   drag from 25,25 to 50,90
  457.   doMenu "select"
  458.   -- to get rid of opaque paint
  459.   choose browse tool
  460.   unlock screen
  461. end displayTiny
  462.  
  463. on dispPictError initialHandler, xcmdAnswer, whichFile
  464.   if xcmdAnswer contains "File not found" then
  465.     addThisPath initialHandler
  466.   end if
  467.   if xcmdAnswer contains "Not enough memory" then
  468.     dialogIt "There is not enough memory to open the file" &"e& whichFile "e& "."
  469.   end if
  470.   if xcmdAnswer contains "File could not be opened" then
  471.     -- this file is not in a format we can handle
  472.     dialogIt "The file" &"e& whichFile "e&& "is stored in a file format this stack doesn't support." && "The file can't be opened."
  473.   end if
  474.   if xcmdAnswer contains "user cancelled operation" then
  475.     --the user hit command-period to cancel
  476.   end if
  477. end dispPICTerror
  478.  
  479. on addThisPath initialHandler
  480.   put line 1 of fld "file name field" into graphicID
  481.   if graphicID = empty then
  482.     dialogIt "Since the File Name field is empty, the original" && "file could not be accessed."
  483.     exit addThisPath
  484.   end if
  485.   put FileName("","Where is the file" && quote & graphicID & quote & "?") into longName
  486.   if longName = empty then exit addThisPath
  487.   put getShortName(longName) into fileName
  488.   put getPath(longName) into folderPath
  489.   updateDocuments folderPath
  490.   put initialHandler &"e& fileName "e into executeThis
  491.   do executeThis
  492. end addThisPath
  493.  
  494. on copyThumbnail
  495.   put the userLevel into userStatus
  496.   if the userLevel < 3 then set the userLevel to 3
  497.   put the tool into toolStatus
  498.   choose select tool
  499.   --or any paint tool
  500.   doMenu "select"
  501.   type "C" with commandKey
  502.   choose toolStatus
  503.   set the userLevel to userStatus
  504. end copyThumbnail
  505.  
  506. on mountFileServer
  507.   global tryServers
  508.   -- thanks to Landon Dyer for the Mount XCMD
  509.   put listVol() into volumeNames
  510.   if not isWithin("Graphics Source",volumeNames) then
  511.     Mount "Apple Graphics", "Apple Graphics Source", "Graphics Source"
  512.     if the result <> empty then put false into tryServers
  513.     --the parameters are zone name, server name, volume name
  514.     -- if the volume wasn't found, Mount puts a message into the result
  515.   end if
  516. end mountFileServer
  517.  
  518. --‚Ä¢‚Ä¢ FIND scripts
  519.  
  520. on findKWSetup whichText
  521.   global lastFindTerms
  522.   if the optionKey is up then put true into goForward
  523.   else put false into goForward
  524.   put "with the keyword" into dialogPhrase
  525.   put whichText into lastFindTerms
  526.   findAGS dialogPhrase,"keywords field","keyword pointer","keyword index",goForward
  527. end findKWSetup
  528.  
  529. on findBookSetup whichText
  530.   --This handler AGS only.
  531.   global lastFindTerms
  532.   if the optionKey is up then put true into goForward
  533.   else put false into goForward
  534.   put "from the book" into dialogPhrase
  535.   put whichText into lastFindTerms
  536.   findAGS dialogPhrase,"appears in books field","book pointer","book index",goForward
  537. end findBookSetup
  538.  
  539. on findFormatSetup whichText
  540.   global lastFindTerms
  541.   if the optionKey is up then put true into goForward
  542.   else put false into goForward
  543.   put "stored in the format" into dialogPhrase
  544.   put whichText into lastFindTerms
  545.   findAGS dialogPhrase,"format field","file format pointer","File Format Index",goForward
  546. end findFormatSetup
  547.  
  548. on findNameSetup whichText
  549.   global lastFindTerms
  550.   put "There aren't any graphics with the description" into noneFound
  551.   put "with the description" into dialogPhrase
  552.   put whichText into lastFindTerms
  553.   lookFor dialogPhrase,"description field","string"
  554. end findNameSetup
  555.  
  556. on lookFor dialogPhrase,whichFld,searchType
  557.   global findParams,lastFindTerms
  558.   set cursor to watch
  559.   lock screen
  560.   put allFoundPrefix() into allFound
  561.   put noneFoundPrefix() into noneFound
  562.   put dialogPhrase && quote & lastFindTerms & quote & "." into endPhrase
  563.   put empty into firstCard
  564.   put empty into currentCard
  565.   repeat until the mouseClick
  566.     if the mouse is up then find whole lastFindTerms in fld whichFld
  567.     else exit repeat
  568.     if the foundChunk is empty then
  569.       --The text wasn't found in the specified field, so exit.
  570.       unlock screen
  571.       stopBtnStatus false
  572.       dialogIt noneFound && endPhrase
  573.       exit lookFor
  574.     end if
  575.     put word 2 of the foundLine into thisLine
  576.     if searchType is "whole" then
  577.       if lastFindTerms is not line thisLine of fld whichFld then
  578.         --There was a find, but not an exact match, so look again.
  579.         next repeat
  580.       end if
  581.     else if whichFld is "description field" AND thisLine <> 1 then
  582.       next repeat
  583.     end if
  584.     -- If it got this far, then there was an exact match.
  585.     if firstCard is empty then
  586.       --This is the first time through.
  587.       put the id of this cd into firstCard
  588.     else
  589.       put the id of this cd into currentCard
  590.       stopBtnStatus true
  591.     end if
  592.     put "Click and Hold to stop." into bg fld "status"
  593.     unlock screen with visual effect wipe left
  594.     if searchType is "whole" then
  595.       selectLine thisLine, last word of the foundLine
  596.     else select the foundChunk
  597.     if shallWeStop() then exit repeat
  598.     if firstCard is currentCard then
  599.       --You're at the same place you started, which means you've gone
  600.       --through all of the cards, so stop.
  601.       stopBtnStatus false
  602.       if not the mouseClick then dialogIt allFound && endPhrase
  603.       exit repeat
  604.     end if
  605.     lock screen
  606.     put empty into bg fld "status"
  607.   end repeat
  608.   put the params into findParams
  609.   stopBtnStatus false
  610. end lookFor
  611.  
  612. --‚Ä¢‚Ä¢ INDEX scripts
  613.  
  614. --In the scripts that manipulate the indexes:
  615. --indexField is the field in this background that stores the text.
  616. --writeField is the name of the field on the card "Index storage" which
  617. --stores the needed index.
  618. --indexType is the class of keyword, e.g., keyword, book,
  619. --in singular form
  620.  
  621. on buildIndex indexField,writeField,pointerField
  622.   if not the lockMessages then
  623.     answer "Build the" && writeField & "?" with "Cancel" or "OK"
  624.     if it is "Cancel" then exit buildIndex
  625.   end if
  626.   lock screen
  627.   put empty into thisIndex
  628.   set lockMessages to true
  629.   set lockRecent to true
  630.   set cursor to watch
  631.   push cd
  632.   go cd 1 of this bg
  633.   put "Building the" && writeField into status
  634.   repeat with j = 1 to the number of cds in this bg
  635.     showProgress status,round(j/(the number of cds in this bg)*100)
  636.     repeat with i = 1 to (the number of lines in fld indexField)
  637.       if line i of fld indexField is empty then next repeat
  638.       if not isWithin(line i of fld indexField,thisIndex) then
  639.         put line i of fld indexField & return after thisIndex
  640.       end if
  641.     end repeat
  642.     go next cd of this bg
  643.   end repeat
  644.   writeIndex sortContainer(thisIndex), writeField
  645.   buildPointers indexField,writeField,pointerField
  646.   pop cd
  647.   hideProgress
  648. end buildIndex
  649.  
  650. on addToIndex indexType,writeField,pointerField
  651.   toggleLockScreen
  652.   ask "Enter the name of the new" && indexType & ":"
  653.   if it is empty then exit addToIndex
  654.   else put it into addThis
  655.   set cursor to busy
  656.   put readIndex(writeField) into thisIndex
  657.   if isWithin(addThis,thisIndex) then
  658.     dialogIt "The" && indexType && quote & addThis & quote && "already exists in the" && writeField & "."
  659.   else
  660.     put addThis into line (the number of lines in thisIndex + 1) of thisIndex
  661.     put sortContainer(thisIndex) into thisIndex
  662.     writeIndex thisIndex,writeField
  663.     put getLine(addThis,readIndex(writeField)) into thisLine
  664.     newPointer thisLine,pointerField
  665.   end if
  666. end addToIndex
  667.  
  668. on newPointer thisLine,pointerField
  669.   repeat with N = 0 to 9
  670.     put return before line thisLine of cd fld (pointerField && N) of cd "Index storage"
  671.   end repeat
  672. end newPointer
  673.  
  674. on deleteFromIndex indexField,writeField,pointerField
  675.   global ListSelectExit
  676.   set cursor to watch
  677.   put "Delete what from the" && writeField & ":" into text
  678.   put readIndex(writeField) into theIndex
  679.   get listDialog(theIndex,13,text,"Dis","Delete,Cancel",604)
  680.   put it into theAnswer
  681.   if ListSelectExit is "cancel" then exit deleteFromIndex
  682.   lock screen
  683.   repeat with i = (the number of lines in theAnswer) down to 1
  684.     --for each term to be deleted
  685.     put true into allInstancesDeleted
  686.     go cd 1 of bg "the collection"
  687.     put empty into alreadySeen
  688.     repeat
  689.       --for each instance of that term to be deleted.
  690.       set cursor to watch
  691.       put line i of theAnswer into whichText
  692.       find whole whichText in fld indexField
  693.       if the foundChunk is empty then exit repeat
  694.       if isWithin(the short name of this cd,alreadySeen) then
  695.         --we've already been to this cd
  696.         exit repeat
  697.       end if
  698.       setCdNo
  699.       put the short name of this cd & return after alreadySeen
  700.       put word 2 of the foundLine into thisLine
  701.       if whichText is not line thisLine of fld indexField then
  702.         --this line is only part of the phrase we're looking for so
  703.         next repeat
  704.       end if
  705.       unlock screen
  706.       selectLine thisLine,indexField
  707.       if the optionKey is down then
  708.         dialogIt "Delete" && quote & whichText & quote && "from the" && indexField && "of this card?","Stop,No,Delete"
  709.         put the result into decision
  710.         unlock screen
  711.         if decision is "Stop" then exit deleteFromIndex
  712.         if decision is "No" then put false into allInstancesDeleted
  713.         if decision is not "Delete" then next repeat
  714.       end if
  715.       delete line thisLine of fld indexField
  716.       lock screen
  717.     end repeat
  718.     if allInstancesDeleted then
  719.       --delete the term from the index
  720.       put getLine(whichText,theIndex) into thisLine
  721.       if thisLine is not empty then  delete line thisLine of theIndex
  722.       writeIndex theIndex,writeField
  723.       deletePointer thisLine,pointerField
  724.     end if
  725.   end repeat
  726. end deleteFromIndex
  727.  
  728. on deletePointer thisLine,pointerField
  729.   repeat with N = 0 to 9
  730.     delete line thisLine of cd fld (pointerField && N) of cd "Index storage"
  731.   end repeat
  732. end deletePointer
  733.  
  734. on writeIndex thisIndex,writeField
  735.   put thisIndex into cd fld writeField of cd "Index storage"
  736.   set the scroll of cd fld writeField of cd "Index storage" to 0
  737.   toggleLockScreen
  738. end writeIndex
  739.  
  740. on exportIndex writeField,fileName
  741.   open file fileName
  742.   put readIndex(writeField) into keywordIndex
  743.   write keywordIndex to file fileName
  744.   close file fileName
  745.   dialogIt "The file" && fileName && "was created."
  746. end exportIndex
  747.  
  748. on assignToCard indexType,indexField,writeField,pointerField
  749.   global ListSelectExit
  750.   set cursor to watch
  751.   put "Assign what" && indexType & "(s) to this card:" into text
  752.   put readIndex(writeField) into theList
  753.   put listDialog(theList,13,text,"Dis","Assign,New,Cancel",605) into assignThis
  754.   if ListSelectExit is "cancel" then exit assignToCard
  755.   else if ListSelectExit is "new" then
  756.     addToIndex indexType,writeField,pointerField
  757.     assignToCard indexType,indexField,writeField,pointerField
  758.     exit assignToCard
  759.   end if
  760.   repeat with i = 1 to the number of lines in assignThis
  761.     set cursor to busy
  762.     if isWithin(line i of assignThis,fld indexField) then
  763.       dialogIt "The" && indexType && quote & line i of assignThis & quote && "is already assigned to this graphic."
  764.     else
  765.       -- The term is not already assigned.
  766.       put fld indexField into newContents
  767.       put line i of assignThis into line (the number of lines in newContents + 1) of newContents
  768.       put alphaSort(newContents) into fld indexField
  769.       assignPointer line i of assignThis,writeField,pointerField
  770.     end if
  771.   end repeat
  772. end assignToCard
  773.  
  774. on assignPointer whichText,writeField,pointerField
  775.   put getValidFileNames(whichText,pointerField,writeField) into validFiles
  776.   if bg fld "file name field" > last item of validFiles then
  777.     put bg fld "file name field" into item (the number of items in validFiles + 1) of validFiles
  778.   else
  779.     put binaryInsert(bg fld "file name field",validFiles) into newItem
  780.     put bg fld "file name field" & "," before item newItem of validFiles
  781.   end if
  782.   writePointer whichText,validFiles,writeField,pointerField
  783. end assignPointer
  784.  
  785. on deleteFromCard indexType,indexField,writeField,pointerField
  786.   global ListSelectExit
  787.   set cursor to watch
  788.   put "Delete what from the" && indexType & "s" && "field of this card?" into text
  789.   put fld indexField into theList
  790.   put listDialog(theList,13,text,"Dis","Delete,Cancel",602) into deleteThese
  791.   if ListSelectExit is "cancel" then exit deleteFromCard
  792.   repeat with N = (the number of lines in deleteThese) down to 1
  793.     set cursor to busy
  794.     put line N of deleteThese into deleteThis
  795.     deletePointerToCard deleteThis,writeField,pointerField
  796.     put getLine(deleteThis,fld indexField) into thisLine
  797.     if thisLine is not 0 then delete line thisLine of fld indexField
  798.   end repeat
  799.   set scroll of fld indexField to 0
  800. end deleteFromCard
  801.  
  802. on deletePointerToCard whichText,writeField,pointerField
  803.   put getValidFileNames(whichText,pointerField,writeField) into validFiles
  804.   put itemNumber(bg fld "file name field",validFiles) into thisItem
  805.   delete item thisItem of validFiles
  806.   writePointer whichText,validFiles,writeField,pointerField
  807. end deletePointerToCard
  808.  
  809. on writePointer whichText,validFiles,writeField,pointerField
  810.   put getLine(whichText,readIndex(writeField)) into pointerLine
  811.   put nameOfPointerField(whichText,pointerField) into pointerFieldName
  812.   put validFiles into line pointerLine of cd fld pointerFieldName of cd "Index storage"
  813. end writePointer
  814.  
  815. --‚Ä¢‚Ä¢ FUNCTIONS
  816.  
  817. function formatDescription whichText
  818. if length of whichText < 31 then return whichText
  819. if length of whichText = 31 and last char of whichText = "‚Ķ" then
  820.   return whichText
  821. end if
  822. return char 1 to 30 of whichText & "‚Ķ" & return & whichText
  823. end formatDescription
  824.  
  825. function bgCard
  826. return (the number of this cd - bgStart()) + 1
  827. end bgCard
  828.  
  829. function bgStart
  830. return the number of cd 1 of this bg
  831. end bgStart
  832.  
  833. function menuPop whichObject
  834. if whichObject is empty then put the target into whichObject
  835. set the hilite of whichObject to true
  836. put the bottom of whichObject into menuT
  837. put the left of whichObject + 1 into menuL
  838. return (menuT & ", " & menuL)
  839. end menuPop
  840.  
  841. function formatDescription whichText
  842. if length of whichText < 31 then return whichText
  843. if length of whichText = 31 and last char of whichText = "‚Ķ" then
  844.   return whichText
  845. end if
  846. return char 1 to 30 of whichText & "‚Ķ" & return & whichText
  847. end formatDescription
  848.  
  849. function developerBtns
  850. return "menu blanket,catalog,indexes,management,card"
  851. end developerBtns
  852.  
  853. function buildPicturePath
  854. --Remove this and calling handlers from the toolkit.
  855. put bg fld "file name field" into fileName
  856. put the long name of this stack into longName
  857. delete char 1 to 7 of longName
  858. delete last char of longName
  859. put getPath(longName) into longName
  860. put "other files:*graphic files:" after longName
  861. return longName & char 1 of fileName & "aaa-" & char 1 of fileName & "zzz:" & fileName
  862. end buildPicturePath
  863.  
  864. function backgroundSort backgroundNumber
  865. if the number of this background < backgroundNumber then
  866.   return "a"
  867. else if the number of this background > backgroundNumber then
  868.   return "zzzzzzzzz"
  869. else
  870.   return line 1 of background field "File name field"
  871. end if
  872. end backgroundSort
  873.  
  874. function cardPictureExists
  875. --returns true if a card picture exists
  876. put the userLevel into userStatus
  877. if the userLevel < 3 then set the userLevel to 3
  878. put the tool into toolStatus
  879. choose select tool
  880. doMenu "select"
  881. if the tool = "lasso tool" then
  882.   --a card picture does exist
  883.   put true into thisText
  884. else
  885.   --no card picture exists
  886.   put false into thisText
  887. end if
  888. choose toolStatus
  889. set the userLevel to userStatus
  890. return thisText
  891. end cardPictureExists
  892.  
  893. function isEPN whichContainer
  894. if char 1 of whichContainer is in "0123456789" OR (char 1 to 2 of whichContainer = "pX") OR (char 1 to 2 of whichContainer = "pM") OR (char 1 to 3 of whichContainer = "k2s") OR (char 1 to 3 of whichContainer = "pGE") OR (char 1 to 3 of whichContainer = "kmb") OR (char 1 to 4 of whichContainer = "APDA") OR (char 1 to 5 of whichContainer = "m5116") then return true
  895. return false
  896. end isEPN
  897.  
  898. function isFigNo whichContainer
  899. if char 1 to 3 of whichContainer = "fig" OR char 1 to 2 of whichContainer = "pg" OR char 1 to 3 of whichContainer = "pge" OR char 1 to 5 of whichContainer = "panel" then return true
  900. return false
  901. end isFigNo
  902.  
  903.  
  904. -- part 391 (button)
  905. -- low flags: 80
  906. -- high flags: 0001
  907. -- rect: left=8 top=8 right=27 bottom=506
  908. -- title width / last selected line: 0
  909. -- icon id / first selected line: 0 / 0
  910. -- text alignment: 1
  911. -- font id: 200
  912. -- text size: 12
  913. -- style flags: 0
  914. -- line height: 16
  915. -- part name: Menu blanket
  916.  
  917.  
  918. -- part 374 (button)
  919. -- low flags: 00
  920. -- high flags: 0002
  921. -- rect: left=240 top=50 right=307 bottom=505
  922. -- title width / last selected line: 0
  923. -- icon id / first selected line: 0 / 0
  924. -- text alignment: 1
  925. -- font id: 156
  926. -- text size: 13
  927. -- style flags: 0
  928. -- line height: 17
  929. -- part name: Info Blanket
  930.  
  931.  
  932. -- part 371 (field)
  933. -- low flags: 81
  934. -- high flags: 0007
  935. -- rect: left=247 top=102 right=272 bottom=498
  936. -- title width / last selected line: 0
  937. -- icon id / first selected line: 0 / 0
  938. -- text alignment: 0
  939. -- font id: 4
  940. -- text size: 9
  941. -- style flags: 0
  942. -- line height: 12
  943. -- part name: List
  944. ----- HyperTalk script -----
  945. on mouseUp
  946.   put clickLine(the name of me) into whichLine
  947.   selectLine whichLine,the short name of me
  948.   findEntry whichLine,line whichLine of me,the name of me
  949. end mouseUp
  950.  
  951.  
  952. -- part 216 (button)
  953. -- low flags: 00
  954. -- high flags: A001
  955. -- rect: left=42 top=314 right=334 bottom=139
  956. -- title width / last selected line: 0
  957. -- icon id / first selected line: 0 / 0
  958. -- text alignment: 1
  959. -- font id: 200
  960. -- text size: 12
  961. -- style flags: 0
  962. -- line height: 16
  963. -- part name: 29 of 619
  964. ----- HyperTalk script -----
  965. on mouseUp
  966.   send findCdNumber to bg btn "find‚Ķ"
  967. end mouseUp
  968.  
  969.  
  970.  
  971. -- part 12 (button)
  972. -- low flags: 00
  973. -- high flags: 0000
  974. -- rect: left=21 top=313 right=335 bottom=39
  975. -- title width / last selected line: 0
  976. -- icon id / first selected line: 23716 / 23716
  977. -- text alignment: 1
  978. -- font id: 200
  979. -- text size: 10
  980. -- style flags: 0
  981. -- line height: 13
  982. -- part name: Prev
  983. ----- HyperTalk script -----
  984. on mouseDown
  985.   global ticksToWait
  986.   if the commandKey is down then
  987.     send setBrowseSpeed to bg btn "management"
  988.     exit mouseDown
  989.   end if
  990.   set hilite of me to true
  991.   go prev cd of this bg
  992.   repeat while the mouse is down
  993.     put (the ticks + ticksToWait) into stopTicks
  994.     repeat until stopTicks < (the ticks)
  995.       if the mouse is up then
  996.         set hilite of me to false
  997.         exit mouseDown
  998.       end if
  999.     end repeat
  1000.     go prev cd of this bg
  1001.   end repeat
  1002.   set hilite of me to false
  1003. end mouseDown
  1004.  
  1005.  
  1006. -- part 29 (field)
  1007. -- low flags: 01
  1008. -- high flags: 0007
  1009. -- rect: left=244 top=123 right=204 bottom=501
  1010. -- title width / last selected line: 0
  1011. -- icon id / first selected line: 0 / 0
  1012. -- text alignment: 0
  1013. -- font id: 200
  1014. -- text size: 10
  1015. -- style flags: 0
  1016. -- line height: 13
  1017. -- part name: Keywords field
  1018. ----- HyperTalk script -----
  1019. on mouseUp
  1020.   if the optionKey is down and the shiftKey is down then
  1021.     delete line clickLine(the name of me) of me
  1022.     exit mouseUp
  1023.   end if
  1024.   put line clickLine(the name of me) of me into whichText
  1025.   if whichText is empty then exit mouseUp
  1026.   set cursor to watch
  1027.   findKWSetup whichText
  1028. end mouseUp
  1029.  
  1030.  
  1031. -- part 84 (button)
  1032. -- low flags: 00
  1033. -- high flags: A000
  1034. -- rect: left=239 top=105 right=123 bottom=303
  1035. -- title width / last selected line: 0
  1036. -- icon id / first selected line: 0 / 0
  1037. -- text alignment: 0
  1038. -- font id: 200
  1039. -- text size: 10
  1040. -- style flags: 0
  1041. -- line height: 13
  1042. -- part name: Keywords:
  1043. ----- HyperTalk script -----
  1044. on mouseUp
  1045.   send findKW to bg btn "find‚Ķ"
  1046. end mouseUp
  1047.  
  1048.  
  1049.  
  1050. -- part 85 (button)
  1051. -- low flags: 00
  1052. -- high flags: A000
  1053. -- rect: left=239 top=84 right=99 bottom=302
  1054. -- title width / last selected line: 0
  1055. -- icon id / first selected line: 0 / 0
  1056. -- text alignment: 0
  1057. -- font id: 200
  1058. -- text size: 10
  1059. -- style flags: 0
  1060. -- line height: 13
  1061. -- part name: File Name:
  1062. ----- HyperTalk script -----
  1063. on mouseUp
  1064.   send findID to bg btn "find‚Ķ"
  1065. end mouseUp
  1066.  
  1067.  
  1068.  
  1069. -- part 93 (button)
  1070. -- low flags: 00
  1071. -- high flags: A000
  1072. -- rect: left=411 top=84 right=99 bottom=458
  1073. -- title width / last selected line: 0
  1074. -- icon id / first selected line: 0 / 0
  1075. -- text alignment: 0
  1076. -- font id: 200
  1077. -- text size: 10
  1078. -- style flags: 0
  1079. -- line height: 13
  1080. -- part name: Format:
  1081. ----- HyperTalk script -----
  1082. on mouseUp
  1083.   send findFormat to bg btn "find‚Ķ"
  1084. end mouseUp
  1085.  
  1086.  
  1087.  
  1088. -- part 94 (field)
  1089. -- low flags: 01
  1090. -- high flags: 0002
  1091. -- rect: left=457 top=84 right=99 bottom=501
  1092. -- title width / last selected line: 0
  1093. -- icon id / first selected line: 0 / 0
  1094. -- text alignment: 0
  1095. -- font id: 200
  1096. -- text size: 10
  1097. -- style flags: 0
  1098. -- line height: 13
  1099. -- part name: format field
  1100. ----- HyperTalk script -----
  1101. on mouseUp
  1102.   put line clickLine(the name of me) of me into whichText
  1103.   if whichText is empty then exit mouseUp
  1104.   set cursor to watch
  1105.   findFormatSetup whichText
  1106. end mouseUp
  1107.  
  1108.  
  1109. -- part 111 (button)
  1110. -- low flags: 80
  1111. -- high flags: 8004
  1112. -- rect: left=368 top=8 right=27 bottom=505
  1113. -- title width / last selected line: 0
  1114. -- icon id / first selected line: 0 / 0
  1115. -- text alignment: 1
  1116. -- font id: 200
  1117. -- text size: 12
  1118. -- style flags: 0
  1119. -- line height: 16
  1120. -- part name: Card
  1121. ----- HyperTalk script -----
  1122. on mouseDown
  1123.   global cardMenu
  1124.   get menuPop(the name of me)
  1125.   put item 1 of it into menuT
  1126.   put item 2 of it into menuL
  1127.   put BigPop(cardMenu,menuT,menuL) into theChoice
  1128.   if theChoice = 1 then displayTiny
  1129.   if theChoice = 2 then
  1130.     put formatDescription(fld "Description field") into fld "Description field"
  1131.   end if
  1132.   if theChoice = 4 then
  1133.     assignToCard "keyword","keywords field","Keyword Index","keyword pointer"
  1134.   end if
  1135.   if theChoice = 5 then
  1136.     deleteFromCard "Keyword","keywords field","Keyword Index","keyword pointer"
  1137.   end if
  1138.   if theChoice = 7 then assignBook
  1139.   set hilite of me to false
  1140. end mouseDown
  1141.  
  1142. on assignBook
  1143.   global ListSelectExit
  1144.   put "appears in books field" into whichFld
  1145.   set cursor to watch
  1146.   put "Assign what book to this card?" into text
  1147.   put readIndex("book index") into theList
  1148.   get listDialog(theList,13,text,"Dis","Assign,New^,Cancel",605)
  1149.   put it into theAnswer
  1150.   if ListSelectExit is "cancel" then exit assignBook
  1151.   else if ListSelectExit is "new" then
  1152.     send addToBookIndex to bg btn "indexes"
  1153.     assignBook
  1154.   end if
  1155.   if line 1 of theAnswer is not empty then
  1156.     put fld whichFld into fldConts
  1157.     if fldConts is empty then put line 1 of theAnswer into fldConts
  1158.     else
  1159.       repeat the number of lines in fldConts times
  1160.         if last line of fldConts is empty then delete last line of fldConts
  1161.       end repeat
  1162.       put line 1 of theAnswer into line (the number of lines in fldConts + 2) of fldConts
  1163.     end if
  1164.     if line 2 of theAnswer is not empty AND line 2 of theAnswer is not space then
  1165.       put return & line 2 of theAnswer after fldConts
  1166.     end if
  1167.     put fld "file name field" into fileName
  1168.     ask "Enter an archive number for" && quote & fileName & quote & "."
  1169.     if it is not empty then put return & it after fldConts
  1170.     put fldConts into fld whichFld
  1171.   end if
  1172. end assignBook
  1173.  
  1174.  
  1175. -- part 31 (field)
  1176. -- low flags: 01
  1177. -- high flags: 0002
  1178. -- rect: left=308 top=84 right=99 bottom=398
  1179. -- title width / last selected line: 0
  1180. -- icon id / first selected line: 0 / 0
  1181. -- text alignment: 0
  1182. -- font id: 200
  1183. -- text size: 10
  1184. -- style flags: 0
  1185. -- line height: 13
  1186. -- part name: File Name field
  1187. ----- HyperTalk script -----
  1188. on mouseUp
  1189.   dialogIt "The file name uniquely identifies a graphic in the stack." && "Click the Find button to find a graphic with a specific file name."
  1190. end mouseUp
  1191.  
  1192.  
  1193. -- part 114 (button)
  1194. -- low flags: 80
  1195. -- high flags: 8004
  1196. -- rect: left=224 top=8 right=27 bottom=367
  1197. -- title width / last selected line: 0
  1198. -- icon id / first selected line: 0 / 0
  1199. -- text alignment: 1
  1200. -- font id: 200
  1201. -- text size: 12
  1202. -- style flags: 0
  1203. -- line height: 16
  1204. -- part name: Management
  1205. ----- HyperTalk script -----
  1206. on mouseDown
  1207.   global managementMenu
  1208.   get menuPop(the name of me)
  1209.   put item 1 of it into menuT
  1210.   put item 2 of it into menuL
  1211.   put BigPop(managementMenu,menuT,menuL) into theChoice
  1212.   if theChoice = 1 then combineStacks
  1213.   else if theChoice = 2 then createShell
  1214.   else if theChoice = 4 then setBrowseSpeed
  1215.   else if theChoice = 5 then sortCards
  1216.   else if theChoice = 6 then printCardsFromBook
  1217.   set the hilite of me to false
  1218. end mouseDown
  1219.  
  1220. on printCardsFromBook
  1221.   global ListSelectExit
  1222.   put readIndex("book index") into theList
  1223.   put "Print cards with graphics from what book?" into text
  1224.   get listDialog(theList,13,text,"Dis","OK,Cancel",604)
  1225.   toggleLockScreen
  1226.   if it is empty OR it is space OR ListSelectExit is "cancel" then exit printCardsFromBook
  1227.   put it into thisBook
  1228.   put getValidFileNames(thisBook,"book pointer","book index") into validFileNames
  1229.   put binaryInsert(bg fld "file name field",validFileNames) into thisItem
  1230.   -- thisItem is the item number in validFileNames of the NEXT valid
  1231.   -- file name in the stack.
  1232.   if thisItem = 0 then exit printCardsFromBook
  1233.   put advanceItem(thisItem,true,validFileNames) into thisItem
  1234.   lock screen
  1235.   open printing
  1236.   repeat with N = (the number of items in validFileNames) down to 1
  1237.     put getCardId(item thisItem of validFileNames) into thisCardId
  1238.     if thisCardId is empty then exit repeat
  1239.     go cd id thisCardId
  1240.     if the result is not empty then next repeat
  1241.     put getLine(thisBook,fld "Appears in books field") into thisLine
  1242.     if thisLine is empty then next repeat
  1243.     -- There is an exact match.
  1244.     print this card
  1245.     updateStatus N
  1246.     stopBtnStatus true
  1247.     unlock screen with visual effect wipe left
  1248.     if N <> the number of items in validFileNames then
  1249.       -- This is not the first time through
  1250.       if shallWeStop() then exit repeat
  1251.     end if
  1252.     lock screen
  1253.     put empty into fld "Status"
  1254.     put advanceItem(thisItem,true,validFileNames) into thisItem
  1255.     if N = 1 then
  1256.       -- You've gone to all of the appropriate cards, so stop.
  1257.       wait 30
  1258.       stopBtnStatus false
  1259.       unlock screen
  1260.       wait 40
  1261.     end if
  1262.   end repeat
  1263.   close printing
  1264.   stopBtnStatus false
  1265.   put empty into bg fld "status"
  1266. end printCardsFromBook
  1267.  
  1268. on setBrowseSpeed
  1269.   global ticksToWait
  1270.   ask "Pause at each card for how many seconds?" with (ticksToWait/60)
  1271.   put it into numberEntered
  1272.   if numberEntered is empty then exit setBrowseSpeed
  1273.   if nonNegativeNumber(numberEntered) then
  1274.     put (numberEntered*60) into ticksToWait
  1275.     put ticksToWait into cd fld "browsing speed" of cd "Index storage"
  1276.   else
  1277.     dialogIt "Please enter a positive number." && quote & numberEntered & quote && "is not a positive number."
  1278.   end if
  1279. end setBrowseSpeed
  1280.  
  1281. on combineStacks
  1282.   -- Import thumbnails and text from a specific stack into this stack.
  1283.   put FileName("STAK","Import data from what stack?") into dataStack
  1284.   if dataStack is empty then exit combineStacks
  1285.   toggleLockScreen
  1286.   put "stack" && quote before dataStack
  1287.   put quote after dataStack
  1288.   set cursor to busy
  1289.   put the long name of this stack into shellStack
  1290.   set lockMessages to true
  1291.   set lockRecent to true
  1292.   set cursor to busy
  1293.   lock screen
  1294.   go dataStack
  1295.   go bg "The Collection"
  1296.   collectIDs
  1297.   put the result into dataStackIDs
  1298.   compareIDs dataStackIDs, shellStack
  1299.   put the result into dataStackIDs
  1300.   copyTextToStack dataStackIDs,shellStack,dataStack
  1301.   put the result into newGraphics
  1302.   set cursor to watch
  1303.   if newGraphics is not empty then
  1304.     showNew newGraphics, "Cards with these file names were added" && "to the stack."
  1305.   end if
  1306.   openBackground
  1307.   openCard
  1308.   choose browse tool
  1309.   send "buildAllIndexes" to bg btn "indexes"
  1310. end combineStacks
  1311.  
  1312. on copyTextToStack dataStackIDs,shellStack,dataStack
  1313.   put empty into newGraphics
  1314.   go shellStack
  1315.   go bg "The Collection"
  1316.   go last cd of this bg
  1317.   put the long name of this cd into shellCd
  1318.   put "Importing data" into status
  1319.   go dataStack
  1320.   put cd fld "paths to graphics" of cd "Index storage" into newPaths
  1321.   put readIndex("keyword index") into newKeywords
  1322.   go bg "the collection"
  1323.   put the long name of this cd into dataCd
  1324.   repeat with i = 1 to the number of lines in dataStackIDs
  1325.     showProgress status,round(i/(the number of lines in dataStackIDs)*100)
  1326.     set cursor to busy
  1327.     if not diskSpaceAvailable() then
  1328.       go shellCd
  1329.       put empty
  1330.       exit copyTextToStack
  1331.     end if
  1332.     go dataCd
  1333.     find whole (line i of dataStackIDs) in fld "file name field"
  1334.     put the long name of this cd into dataCd
  1335.     put fld "description field" into description
  1336.     put fld "keywords field" into keywords
  1337.     put fld "file name field" into graphicID
  1338.     put fld "format field" into graphicFormat
  1339.     put fld "appears in books field" into books
  1340.     if cardPictureExists() then
  1341.       copyThumbnail
  1342.       put true into pictOnClipboard
  1343.     else put false into pictOnClipboard
  1344.     go shellCd
  1345.     doMenu "new card"
  1346.     put the long name of this cd into shellCd
  1347.     setCdNo
  1348.     unlock screen
  1349.     put description into fld "description field"
  1350.     put keywords into fld "keywords field"
  1351.     put graphicID into fld "file name field"
  1352.     put fld "file name field" & return after newGraphics
  1353.     put graphicFormat into fld "format field"
  1354.     put books into fld "appears in books field"
  1355.     if pictOnClipboard then
  1356.       --a thumbnail needs to be pasted onto the card.
  1357.       type "V" with commandKey
  1358.     end if
  1359.     lock screen
  1360.     choose browse tool
  1361.   end repeat
  1362.   hideProgress
  1363.   checkDocuments newPaths
  1364.   put readIndex("keyword index") into oldKeywords
  1365.   repeat with N = 1 to the number of lines in newKeywords
  1366.     if not isWithin(line N of newKeywords,oldKeywords) then
  1367.       put line N of newKeywords into line (the number of lines in oldKeywords + 1) of oldKeywords
  1368.     end if
  1369.   end repeat
  1370.   writeIndex sortContainer(oldKeywords),"keyword index"
  1371.   go bg "The Collection"
  1372.   -- currently at the first cd
  1373.   if fld "file name field" is empty then doMenu "delete card"
  1374.   return newGraphics
  1375. end copyTextToStack
  1376.  
  1377. on collectIDs
  1378.   go first cd of this bg
  1379.   put "Collecting File Names" into status
  1380.   repeat with j = 1 to the number of cds in this bg
  1381.     showProgress status,round(j/(the number of cds in this bg)*100)
  1382.     set cursor to busy
  1383.     put fld "file name field" & return after listOfIDs
  1384.     go next cd of this bg
  1385.   end repeat
  1386.   hideProgress
  1387.   return listOfIDs
  1388. end collectIDs
  1389.  
  1390. on compareIDs dataStackIDs, shellStack
  1391.   go shellStack
  1392.   go bg "the collection"
  1393.   if the number of cds in this bg is 1 AND bg fld "file name field" is empty then return dataStackIDs
  1394.   put 1 into i
  1395.   put empty into alreadyExists
  1396.   put "Comparing File Names" into status
  1397.   repeat with j = 1 to the number of lines in dataStackIDs
  1398.     showProgress status,round(j/(the number of lines in dataStackIDs)*100)
  1399.     set cursor to busy
  1400.     find whole (line i of dataStackIDs) in fld "file name field"
  1401.     if the foundField = empty then
  1402.       --this file name needs to be added to the shell stack
  1403.       add 1 to i
  1404.     else
  1405.       --this file name already exists in the shell stack
  1406.       put line i of dataStackIDs & return after alreadyExists
  1407.       delete line i of dataStackIDs
  1408.     end if
  1409.   end repeat
  1410.   hideProgress
  1411.   if alreadyExists <> empty then showExisting alreadyExists
  1412.   return dataStackIDs
  1413. end compareIDs
  1414.  
  1415. on createShell
  1416.   global activeListName
  1417.   dialogIt "Delete all cards in this background except for one?","Cancel,OK"
  1418.   if the result = "Cancel" then exit createShell
  1419.   -- send mouseUp now so it isn't sent at the end of these handlers.
  1420.   mouseUp
  1421.   set cursor to watch
  1422.   toggleLockScreen
  1423.   lock screen
  1424.   set lockMessages to true
  1425.   set lockRecent to true
  1426.   go first cd of this bg
  1427.   choose select tool
  1428.   drag from 0,0 to 300,300
  1429.   doMenu "Clear Picture"
  1430.   choose browse tool
  1431.   put empty into fld "description field"
  1432.   put empty into fld "file name field"
  1433.   put empty into fld "format field"
  1434.   put empty into fld "keywords field"
  1435.   put empty into fld "appears in books field"
  1436.   go next cd of this bg
  1437.   put the number of cds in this bg into N
  1438.   put (N - 1) into deleteThisMany
  1439.   if deleteThisMany > 0 then
  1440.     put "Deleting cards" into status
  1441.     repeat with i = 1 to deleteThisMany
  1442.       showProgress status,round(i/N*100)
  1443.       set cursor to busy
  1444.       if the short name of this bg = "The Collection" then
  1445.         doMenu "delete card"
  1446.       end if
  1447.     end repeat
  1448.     hideProgress
  1449.   end if
  1450.   go cd "Index storage"
  1451.   if the result is not empty then
  1452.     dialogIt "There isn't a card named Index storage, so the indexes" && "could not be deleted."
  1453.     exit createShell
  1454.   end if
  1455.   send openCard to cd "Index storage"
  1456.   repeat until the lockScreen is false
  1457.     unlock screen with barn door open
  1458.   end repeat
  1459.   answer "Delete indexes?" with "Cancel" or "OK"
  1460.   if it is "Cancel" then exit createShell
  1461.   repeat with i = 1 to the number of cd flds
  1462.     put empty into cd fld i
  1463.   end repeat
  1464.   put "Untitled" into activeListName
  1465.   doMenu "compact stack"
  1466. end createShell
  1467.  
  1468.  
  1469. -- part 163 (button)
  1470. -- low flags: 00
  1471. -- high flags: A002
  1472. -- rect: left=128 top=32 right=55 bottom=229
  1473. -- title width / last selected line: 0
  1474. -- icon id / first selected line: 0 / 0
  1475. -- text alignment: 1
  1476. -- font id: 200
  1477. -- text size: 12
  1478. -- style flags: 0
  1479. -- line height: 16
  1480. -- part name: Open Graphic
  1481. ----- HyperTalk script -----
  1482. on mouseUp
  1483.   displayPicture
  1484. end mouseUp
  1485.  
  1486.  
  1487. -- part 217 (button)
  1488. -- low flags: 00
  1489. -- high flags: A000
  1490. -- rect: left=173 top=314 right=334 bottom=231
  1491. -- title width / last selected line: 0
  1492. -- icon id / first selected line: 0 / 0
  1493. -- text alignment: 1
  1494. -- font id: 200
  1495. -- text size: 12
  1496. -- style flags: 0
  1497. -- line height: 16
  1498. -- part name: Quit
  1499. ----- HyperTalk script -----
  1500. on mouseUp
  1501.   doMenu "quit hypercard"
  1502. end mouseUp
  1503.  
  1504.  
  1505. -- part 274 (button)
  1506. -- low flags: 80
  1507. -- high flags: 8004
  1508. -- rect: left=124 top=8 right=27 bottom=223
  1509. -- title width / last selected line: 0
  1510. -- icon id / first selected line: 0 / 0
  1511. -- text alignment: 1
  1512. -- font id: 200
  1513. -- text size: 12
  1514. -- style flags: 0
  1515. -- line height: 16
  1516. -- part name: Indexes
  1517. ----- HyperTalk script -----
  1518. on mouseDown
  1519.   global indexesMenu
  1520.   get menuPop(the name of me)
  1521.   put item 1 of it into menuT
  1522.   put item 2 of it into menuL
  1523.   get BigPop(indexesMenu,menuT,menuL)
  1524.   indexesChoice it
  1525.   set the hilite of me to false
  1526. end mouseDown
  1527.  
  1528. -- AGS only
  1529.  
  1530. on indexesChoice theChoice
  1531.   -- This is a separate handler so that other handlers can call
  1532.   -- this handler from other objects.
  1533.   if theChoice = 1 then buildAllIndexes
  1534.   if theChoice = 3 then
  1535.     buildIndex "keywords field","Keyword Index","keyword pointer"
  1536.   end if
  1537.   if theChoice = 4 then
  1538.     addToIndex "keyword","Keyword Index","keyword pointer"
  1539.   end if
  1540.   if theChoice = 5 then
  1541.     deleteFromIndex "Keywords field","Keyword Index","keyword pointer"
  1542.   end if
  1543.   if theChoice = 6 then
  1544.     exportIndex "Keyword Index","Graphics Keyword Index"
  1545.   end if
  1546.   if theChoice = 8 then buildBookIndex
  1547.   if theChoice = 9 then addToBookIndex
  1548.   if theChoice = 10 then
  1549.     deleteFromIndex "Appears in Books field", "Book Index"
  1550.   end if
  1551.   if theChoice = 11 then exportIndex "book index","Graphics Book Index"
  1552.   if theChoice = 13 then
  1553.     buildFileNameIndex "file name field","File Name Index"
  1554.   end if
  1555.   if theChoice = 14 then
  1556.     buildIndex "format field","File Format Index","file format pointer"
  1557.   end if
  1558. end indexesChoice
  1559.  
  1560. on buildAllIndexes
  1561.   answer "Build all of the indexes?" with "Cancel" or "OK"
  1562.   if it is "cancel" then exit buildAllIndexes
  1563.   set lockMessages to true
  1564.   sortCards
  1565.   indexesChoice 3
  1566.   indexesChoice 8
  1567.   indexesChoice 13
  1568.   indexesChoice 14
  1569.   answer "All of the indexes have been built."
  1570.   openCard
  1571. end buildAllIndexes
  1572.  
  1573. on buildFileNameIndex indexField,writeField
  1574.   if not the lockMessages then
  1575.     answer "Build the" && writeField && "?" with "Cancel" or "OK"
  1576.     if it is "Cancel" then exit buildFileNameIndex
  1577.   end if
  1578.   lock screen
  1579.   put empty into thisIndex
  1580.   put empty into cd fld "file name index" of cd "Index storage"
  1581.   set lockMessages to true
  1582.   set cursor to watch
  1583.   push cd
  1584.   go cd 1 of this bg
  1585.   put "Building the" && writeField into status
  1586.   repeat with N = 1 to the number of cds in this bg
  1587.     showProgress status,round(N/(the number of cds in this bg)*100)
  1588.     put bg fld "file name field" & "," & the short id of this cd & return after newEntries
  1589.     if the number of lines in newEntries > 50 then
  1590.       put (the number of lines in cd fld "file name index" of cd "Index storage") + 1 into thisLine
  1591.       put newEntries into line thisLine of cd fld "file name index" of cd "Index storage"
  1592.       put empty into newEntries
  1593.     end if
  1594.     go next cd of this bg
  1595.   end repeat
  1596.   if newEntries is not empty then appendFileNameIndex newEntries
  1597.   pop cd
  1598.   hideProgress
  1599. end buildFileNameIndex
  1600.  
  1601. on appendFileNameIndex newEntries
  1602.   put (the number of lines in cd fld "file name index" of cd "Index storage") + 1 into thisLine
  1603.   put newEntries into line thisLine of cd fld "file name index" of cd "Index storage"
  1604. end appendFileNameIndex
  1605.  
  1606. on addToBookIndex
  1607.   ask "Enter the name of the new book:"
  1608.   if it = empty then exit addToBookIndex
  1609.   put it into addThis
  1610.   put readIndex("book index") into bookIndex
  1611.   if isWithin(addThis,bookIndex) then
  1612.     dialogIt "The book" && quote & addThis & quote && "already exists in the Book Index."
  1613.     exit addToBookIndex
  1614.   end if
  1615.   ask "What is the Eng. part number?"
  1616.   if it is empty then put empty into engPartNo
  1617.   else put return & it into engPartNo
  1618.   put return & addThis & engPartNo after bookIndex
  1619.   writeIndex bookIndex, "book index"
  1620.   deleteDeadLines
  1621.   sortBookIndex
  1622.   formatBookIndex
  1623. end addToBookIndex
  1624.  
  1625. on buildBookIndex
  1626.   if not the lockMessages then
  1627.     answer "Build the Book Index?" with "Cancel" or "OK"
  1628.     if it is "Cancel" then exit buildBookIndex
  1629.   end if
  1630.   collectBooks
  1631.   get cd fld "book index" of cd "Index storage"
  1632.   if it is empty then exit buildBookIndex
  1633.   sortBookIndex
  1634.   formatBookIndex
  1635.   EXIT TO HYPERCARD -- DEBUG
  1636.   buildPointers "appears in books field","book index","book pointer"
  1637. end buildBookIndex
  1638.  
  1639. on collectBooks
  1640.   lock screen
  1641.   set lockMessages to true
  1642.   set lockRecent to true
  1643.   set cursor to busy
  1644.   push cd
  1645.   go cd 1 of this bg
  1646.   put empty into bookIndex
  1647.   put "Collecting book names" into status
  1648.   repeat with j = 1 to the number of cds in this bg
  1649.     showProgress status,round(j/(the number of cds in this bg)*100)
  1650.     repeat with i = 1 to (the number of lines in fld "Appears in books field")
  1651.       set cursor to busy
  1652.       put line i of fld "Appears in books field" into valueOfThisLine
  1653.       if valueOfThisLine is empty OR isFigNo(valueOfThisLine) OR isWithin(valueOfThisLine,bookIndex) OR bookIndex contains "^" & valueOfThisLine OR bookIndex contains valueOfThisLine & "^" then
  1654.         -- This term exists in the book index
  1655.         next repeat
  1656.       end if
  1657.       -- This is a new book or Engineering part number.
  1658.       put line (i-1) of fld "Appears in books field" into valueOfPrevLine
  1659.       if valueOfPrevLine is empty then
  1660.         -- The previous line is empty, this new item is a book.
  1661.         put valueOfThisLine & return after bookIndex
  1662.       else
  1663.         -- This is a new Engineering part number.
  1664.         put addNewEPN(valueOfThisLine,valueOfPrevLine,bookIndex) into bookIndex
  1665.       end if
  1666.     end repeat
  1667.     go next cd of this bg
  1668.   end repeat
  1669.   hideProgress
  1670.   writeIndex bookIndex,"book index"
  1671. end collectBooks
  1672.  
  1673. on sortBookIndex
  1674.   put readIndex("book index") into bookIndex
  1675.   put sortContainer(bookIndex) into bookIndex
  1676.   put substitute("^", return,bookIndex) into bookIndex
  1677.   writeIndex bookIndex, "book index"
  1678. end sortBookIndex
  1679.  
  1680. on formatBookIndex
  1681.   put readIndex("book index") into bookIndex
  1682.   if bookIndex is empty then exit formatBookIndex
  1683.   set cursor to busy
  1684.   put 1 into i
  1685.   put "Formatting Book Index (deleting extra lines)" into status
  1686.   repeat (the number of lines in bookIndex) times
  1687.     showProgress status,round(i/(the number of lines in bookIndex)*100)
  1688.     set cursor to busy
  1689.     if line i of bookIndex is empty then delete line i of bookIndex
  1690.     else add 1 to i
  1691.   end repeat
  1692.   hideProgress
  1693.   put 1 into i
  1694.   put "Formatting Book Index (eng. part nos.)" into status
  1695.   repeat (the number of lines in bookIndex*2) times
  1696.     showProgress status,round(i/(the number of lines in bookIndex)*100)
  1697.     -- If this line is an engineering part no. AND the next line
  1698.     -- is NOT an EPN, then put a blank line after this line.
  1699.     set cursor to busy
  1700.     if isEPN(line i of bookIndex) AND not isEPN(line i + 1 of bookIndex) AND line (i+1) of bookIndex is not empty then
  1701.       put return & " " after line i of bookIndex
  1702.       -- Put this space into the line because the XCMD I use to
  1703.       -- display lists doesn't show empty lines.
  1704.     end if
  1705.     add 1 to i
  1706.     if i = (the number of lines in bookIndex) then exit repeat
  1707.   end repeat
  1708.   hideProgress
  1709.   put 2 into i
  1710.   put "Formatting Book Index (books)" into status
  1711.   repeat (the number of lines in bookIndex*2) times
  1712.     showProgress status,round(i/(the number of lines in bookIndex)*100)
  1713.     --if this line is a book and it doesn't have an engineering part no
  1714.     --then put a blank line after this line
  1715.     set cursor to busy
  1716.     if isEPN(line i of bookIndex) = false AND line i of bookIndex <> " " then
  1717.       if isEPN(line i-1 of bookIndex) = false AND line (i-1) of bookIndex <> " " then
  1718.         put " " & return before line i of bookIndex
  1719.       end if
  1720.     end if
  1721.     if i = (the number of lines in bookIndex) then exit repeat
  1722.     add 1 to i
  1723.   end repeat
  1724.   hideProgress
  1725.   if the number of lines in bookIndex > 0 then
  1726.     repeat until last line of bookIndex <> empty
  1727.       delete last line of bookIndex
  1728.     end repeat
  1729.   end if
  1730.   writeIndex bookIndex, "book index"
  1731. end formatBookIndex
  1732.  
  1733. on deleteDeadLines
  1734.   put readIndex("book index") into bookIndex
  1735.   put 1 into i
  1736.   put "Formatting Book Index (extra lines)" into status
  1737.   repeat (the number of lines in bookIndex) times
  1738.     showProgress status,round(i/(the number of lines in bookIndex)*100)
  1739.     if line i of bookIndex = empty OR line i of bookIndex = space then
  1740.       delete line i of bookIndex
  1741.     else add 1 to i
  1742.   end repeat
  1743.   hideProgress
  1744.   writeIndex bookIndex, "book index"
  1745. end deleteDeadLines
  1746.  
  1747. --‚Ä¢ FUNCTIONS
  1748.  
  1749. function addNewEPN newEPN,thisBook,bookIndex
  1750. -- newEPN is the Engineering part number (EPN) that needs to be added.
  1751. -- thisBook is the book this EPN refers to.
  1752. -- bookIndex is the book index.
  1753. put offset(thisBook,bookIndex) into numberOfChars
  1754. put the number of lines in char 1 to numberOfChars of bookIndex into thisLine
  1755. if thisLine is empty then
  1756.   -- The book does not exist in the book index (this should never happen).
  1757.   return bookIndex
  1758. end if
  1759. put "^" & newEPN after line thisLine of bookIndex
  1760. return bookIndex
  1761. end addNewEPN
  1762.  
  1763.  
  1764. -- part 282 (field)
  1765. -- low flags: 80
  1766. -- high flags: 2002
  1767. -- rect: left=15 top=84 right=267 bottom=226
  1768. -- title width / last selected line: 0
  1769. -- icon id / first selected line: 0 / 0
  1770. -- text alignment: 0
  1771. -- font id: 200
  1772. -- text size: 12
  1773. -- style flags: 0
  1774. -- line height: 16
  1775. -- part name: Banner
  1776.  
  1777.  
  1778. -- part 289 (button)
  1779. -- low flags: 00
  1780. -- high flags: A000
  1781. -- rect: left=239 top=205 right=222 bottom=333
  1782. -- title width / last selected line: 0
  1783. -- icon id / first selected line: 0 / 0
  1784. -- text alignment: 0
  1785. -- font id: 200
  1786. -- text size: 10
  1787. -- style flags: 0
  1788. -- line height: 13
  1789. -- part name: Appears in books:
  1790. ----- HyperTalk script -----
  1791. on mouseUp
  1792.   send findBook to bg btn "find‚Ķ"
  1793. end mouseUp
  1794.  
  1795.  
  1796.  
  1797. -- part 290 (field)
  1798. -- low flags: 01
  1799. -- high flags: 0007
  1800. -- rect: left=244 top=222 right=303 bottom=501
  1801. -- title width / last selected line: 0
  1802. -- icon id / first selected line: 0 / 0
  1803. -- text alignment: 0
  1804. -- font id: 200
  1805. -- text size: 10
  1806. -- style flags: 0
  1807. -- line height: 13
  1808. -- part name: appears in books field
  1809. ----- HyperTalk script -----
  1810. on mouseUp
  1811.   put line clickLine(the name of me) of me into whichText
  1812.   if whichText is empty then exit mouseUp
  1813.   set cursor to watch
  1814.   if isFigNo(whichText) then
  1815.     selectLine clickLine(the name of me), the short name of me
  1816.     answer "You can't search by the archive number."
  1817.     select empty
  1818.   else findBookSetup whichText
  1819. end mouseUp
  1820.  
  1821.  
  1822. -- part 298 (field)
  1823. -- low flags: 01
  1824. -- high flags: 0002
  1825. -- rect: left=308 top=62 right=77 bottom=501
  1826. -- title width / last selected line: 0
  1827. -- icon id / first selected line: 0 / 0
  1828. -- text alignment: 0
  1829. -- font id: 200
  1830. -- text size: 10
  1831. -- style flags: 0
  1832. -- line height: 13
  1833. -- part name: description field
  1834. ----- HyperTalk script -----
  1835. on mouseUp
  1836.   if the shiftKey is down then setMe
  1837.   else
  1838.     put line clickLine(the name of me) of me into whichText
  1839.     if whichText is empty then exit mouseUp
  1840.     set cursor to watch
  1841.     findNameSetup whichText
  1842.   end if
  1843. end mouseUp
  1844.  
  1845. on setMe
  1846.   lock screen
  1847.   if the style of me is "scrolling" then
  1848.     setSize (top of me + textHeight of me + 2)
  1849.     set the style of me to rectangle
  1850.   else
  1851.     setSize (the bottom of fld "appears in books field")
  1852.     set the style of me to scrolling
  1853.   end if
  1854. end setMe
  1855.  
  1856. on setSize whichSize
  1857.   get the rect of me
  1858.   put whichSize into item 4 of it
  1859.   set the rect of me to it
  1860. end setSize
  1861.  
  1862.  
  1863. -- part 299 (button)
  1864. -- low flags: 00
  1865. -- high flags: A000
  1866. -- rect: left=9 top=283 right=305 bottom=63
  1867. -- title width / last selected line: 0
  1868. -- icon id / first selected line: 0 / 0
  1869. -- text alignment: 1
  1870. -- font id: 200
  1871. -- text size: 12
  1872. -- style flags: 0
  1873. -- line height: 16
  1874. -- part name: Find…
  1875. ----- HyperTalk script -----
  1876. on mouseUp
  1877.   global ListSelectExit
  1878.   put "Find graphics by:" into text
  1879.   put "Description" & return & "File Name" & return & "File Format" & return & "Keyword" & return & "Book" & return & "Card number" into theList
  1880.   get listDialog(theList,13,text,"one","OK,Cancel",602)
  1881.   toggleLockScreen
  1882.   put it into theAnswer
  1883.   if ListSelectExit is "cancel" then exit mouseUp
  1884.   else if theAnswer is "description" then findName
  1885.   else if theAnswer is "file name" then findID
  1886.   else if theAnswer is "file format" then findFormat
  1887.   else if theAnswer is "keyword" then findKW
  1888.   else if theAnswer is "book" then findBook
  1889.   else if theAnswer is "card number" then findCdNumber
  1890. end mouseUp
  1891.  
  1892. on findKW
  1893.   global ListSelectExit,currentSection
  1894.   put readIndex("keyword index",currentSection) into theList
  1895.   put "Find graphics with what keyword?" into text
  1896.   get listDialog(theList,13,text,"Dis","OK,Cancel",602)
  1897.   toggleLockScreen
  1898.   if ListSelectExit is not "cancel" then findKWSetup it
  1899. end findKW
  1900.  
  1901. on findBook
  1902.   global ListSelectExit
  1903.   put readIndex("book index") into theList
  1904.   put "Find graphics from what book?" into text
  1905.   get listDialog(theList,13,text,"Dis","OK,Cancel",604)
  1906.   toggleLockScreen
  1907.   if it is not empty AND it is not space AND ListSelectExit is not "cancel" then findBookSetup it
  1908. end findBook
  1909.  
  1910. on findName
  1911.   global enterName
  1912.   ask "Find graphics with what description?" with enterName
  1913.   if it is not empty then
  1914.     toggleLockScreen
  1915.     put it into enterName
  1916.     findNameSetup enterName
  1917.   end if
  1918. end findName
  1919.  
  1920. on findFormat
  1921.   global enterFormat, ListSelectExit
  1922.   put readIndex("file format index") into theList
  1923.   put "Find graphics with what file format?" into text
  1924.   get listDialog(theList,13,text,"Dis","OK,Cancel",602)
  1925.   toggleLockScreen
  1926.   if ListSelectExit is not "cancel" then findFormatSetup it
  1927. end findFormat
  1928.  
  1929. on findID
  1930.   global idEntered
  1931.   ask "Find graphic with what file name:" with idEntered
  1932.   toggleLockScreen
  1933.   if it is empty then exit findID
  1934.   put it into idEntered
  1935.   set cursor to busy
  1936.   lock screen
  1937.   set lockMessages to true
  1938.   set lockRecent to true
  1939.   find idEntered in fld "file name field"
  1940.   if the foundChunk is empty then
  1941.     dialogIt "The file name "& quote & idEntered & quote && "is not assigned to any graphic."
  1942.   else
  1943.     openCard
  1944.     unlock screen with visual effect wipe left
  1945.     select line 1 of bg fld "file name field"
  1946.     wait 30
  1947.     select empty
  1948.   end if
  1949. end findID
  1950.  
  1951. on findCdNumber
  1952.   global cdNo
  1953.   toggleLockScreen
  1954.   ask "Find graphic with the card number:" with cdNo
  1955.   if it is empty then exit findCdNumber
  1956.   put it into cdNo
  1957.   go cd cdNo of this bg
  1958.   if the result is empty then unlock screen with visual effect wipe left
  1959.   else
  1960.     dialogIt quote & cdNo & quote && "is not a valid card number."
  1961.   end if
  1962. end findCdNumber
  1963.  
  1964.  
  1965.  
  1966. -- part 320 (button)
  1967. -- low flags: 80
  1968. -- high flags: C002
  1969. -- rect: left=15 top=62 right=84 bottom=226
  1970. -- title width / last selected line: 0
  1971. -- icon id / first selected line: 0 / 0
  1972. -- text alignment: 1
  1973. -- font id: 200
  1974. -- text size: 12
  1975. -- style flags: 0
  1976. -- line height: 16
  1977. -- part name: Help Section
  1978.  
  1979.  
  1980. -- part 319 (button)
  1981. -- low flags: 80
  1982. -- high flags: 0001
  1983. -- rect: left=19 top=65 right=81 bottom=37
  1984. -- title width / last selected line: 0
  1985. -- icon id / first selected line: 3071 / 3071
  1986. -- text alignment: 1
  1987. -- font id: 200
  1988. -- text size: 14
  1989. -- style flags: 0
  1990. -- line height: 18
  1991. -- part name: help close
  1992. ----- HyperTalk script -----
  1993. on mouseUp
  1994.   send cleanExit to bg btn "Help"
  1995. end mouseUp
  1996.  
  1997. on mouseDown
  1998.   set the icon of me to 3358
  1999. end mouseDown
  2000.  
  2001. on mouseLeave
  2002.   set the icon of me to 3071
  2003. end mouseLeave
  2004.  
  2005.  
  2006.  
  2007. -- part 321 (button)
  2008. -- low flags: 80
  2009. -- high flags: A002
  2010. -- rect: left=240 top=282 right=306 bottom=302
  2011. -- title width / last selected line: 0
  2012. -- icon id / first selected line: 0 / 0
  2013. -- text alignment: 1
  2014. -- font id: 200
  2015. -- text size: 12
  2016. -- style flags: 0
  2017. -- line height: 16
  2018. -- part name: New List
  2019. ----- HyperTalk script -----
  2020. on mouseUp
  2021.   global changesToList, activeListName, taggedList
  2022.   put the long name of this cd into returnHere
  2023.   saveChanges true,taggedList,true
  2024.   set cursor to busy
  2025.   push cd
  2026.   lock screen
  2027.   goListStack "untitled"
  2028.   --Just to make sure that the list stack is there and it is unlocked.
  2029.   --If it's not, the user should know about it at this point, while
  2030.   --trying to create a new list.
  2031.   if the result = "no" then
  2032.     pop cd
  2033.     exit to hypercard
  2034.   end if
  2035.   go returnHere
  2036.   openCard
  2037.   put 0 into listScroll
  2038.   set the scroll of fld "list" to listScroll
  2039.   put false into changesToList
  2040.   put "Untitled" into activeListName
  2041.   showListName
  2042.   put empty into taggedList
  2043.   put taggedList into fld "list"
  2044. end mouseUp
  2045.  
  2046.  
  2047. -- part 322 (button)
  2048. -- low flags: 80
  2049. -- high flags: A002
  2050. -- rect: left=301 top=282 right=306 bottom=377
  2051. -- title width / last selected line: 0
  2052. -- icon id / first selected line: 0 / 0
  2053. -- text alignment: 1
  2054. -- font id: 200
  2055. -- text size: 12
  2056. -- style flags: 0
  2057. -- line height: 16
  2058. -- part name: Open List…
  2059. ----- HyperTalk script -----
  2060. on mouseUp
  2061.   global changesToList, taggedList, activeListName, listScroll
  2062.   put long name of this cd into returnHere
  2063.   if changesToList then saveChanges true,taggedList,true
  2064.   set cursor to busy
  2065.   openAList returnHere
  2066.   put the result into selectedList
  2067.   if selectedList is empty then
  2068.     go returnHere
  2069.     openCard
  2070.     exit mouseUp
  2071.   end if
  2072.   set cursor to busy
  2073.   put selectedList into activeListName
  2074.   goListStack activeListName
  2075.   if the result = "no" then exit mouseUp
  2076.   put fld "tagged list" into taggedList
  2077.   go returnHere
  2078.   put taggedList into fld "list"
  2079.   put 0 into listScroll
  2080.   set scroll of fld "list" to listScroll
  2081.   showListName
  2082.   put false into changesToList
  2083.   openCard
  2084. end mouseUp
  2085.  
  2086. on openAList returnHere
  2087.   global activeListName, ListSelectExit
  2088.   -- build a list of the lists
  2089.   goListStack
  2090.   if the result = "no" then exit openAList
  2091.   go bg "lists"
  2092.   put empty into listNames
  2093.   repeat (the number of cds in this bg) times
  2094.     set cursor to busy
  2095.     if the short name of this cd <> "untitled" then
  2096.       put the short name of this cd & return after listNames
  2097.     end if
  2098.     go next cd of this bg
  2099.   end repeat
  2100.   put sortContainer(listNames) into theList
  2101.   put "Select a list to open:" into text
  2102.   go returnHere
  2103.   put listDialog(theList,13,text,"one","OK,Cancel",602) into theChoice
  2104.   if ListSelectExit = "cancel" then return empty
  2105.   else return theChoice
  2106. end openAList
  2107.  
  2108.  
  2109. -- part 323 (button)
  2110. -- low flags: 80
  2111. -- high flags: A002
  2112. -- rect: left=420 top=282 right=306 bottom=505
  2113. -- title width / last selected line: 0
  2114. -- icon id / first selected line: 0 / 0
  2115. -- text alignment: 1
  2116. -- font id: 200
  2117. -- text size: 12
  2118. -- style flags: 0
  2119. -- line height: 16
  2120. -- part name: Delete List…
  2121. ----- HyperTalk script -----
  2122. on mouseUp
  2123.   put the long name of this cd into returnHere
  2124.   put listsToDelete(returnHere) into deleteLists
  2125.   if deleteLists = empty then
  2126.     go returnHere
  2127.     openCard
  2128.     exit mouseUp
  2129.   end if
  2130.   goListStack (line 1 of deleteLists)
  2131.   if the result = "no" then
  2132.     go returnHere
  2133.     openCard
  2134.     exit mouseUp
  2135.   end if
  2136.   -- You're in the list stack.
  2137.   repeat with i = 1 to the number of lines in deleteLists
  2138.     if the optionKey is up then
  2139.       dialogIt "Delete list "& quote & line i of deleteLists & quote & "?", "Cancel,OK"
  2140.       if the result is "cancel" then exit mouseUp
  2141.     end if
  2142.     go cd (line i of deleteLists)
  2143.     if the result <> empty then
  2144.       dialogIt "The list" && the short name of this cd && "was not found."
  2145.       next repeat
  2146.     end if
  2147.     doMenu "delete card"
  2148.   end repeat
  2149.   go returnHere
  2150.   openCard
  2151. end mouseUp
  2152.  
  2153. function listsToDelete returnHere
  2154. global activeListName, ListSelectExit
  2155. -- build a list of the lists
  2156. goListStack "untitled"
  2157. if the result = "no" then return empty
  2158. if the number of cds in this bg = 1 then
  2159.   answer "You can't delete the only list."
  2160.   exit listsToDelete
  2161. end if
  2162. put empty into listNames
  2163. repeat (the number of cds in this bg) times
  2164.   if the short name of this cd is not activeListName AND the short name of this cd is not "untitled" then
  2165.     put the short name of this cd & return after listNames
  2166.   end if
  2167.   go next cd of this bg
  2168. end repeat
  2169. put sortContainer(listNames) into theList
  2170. put "Select the list to delete:" into text
  2171. go returnHere
  2172. put listDialog(theList,13,text,"Dis","Delete,Cancel",602) into theChoice
  2173. if ListSelectExit is "cancel" then return empty
  2174. else return theChoice
  2175. end listsToDelete
  2176.  
  2177.  
  2178.  
  2179. -- part 324 (button)
  2180. -- low flags: 80
  2181. -- high flags: A002
  2182. -- rect: left=431 top=312 right=336 bottom=505
  2183. -- title width / last selected line: 0
  2184. -- icon id / first selected line: 0 / 0
  2185. -- text alignment: 1
  2186. -- font id: 200
  2187. -- text size: 12
  2188. -- style flags: 0
  2189. -- line height: 16
  2190. -- part name: Print List…
  2191. ----- HyperTalk script -----
  2192. on mouseUp
  2193.   global listScroll, activeListName
  2194.   put empty into savedUserLevel
  2195.   if the userLevel < 4 then
  2196.     put the userLevel into savedUserLevel
  2197.     set the userLevel to 4
  2198.   end if
  2199.   put the long name of this cd into returnHere
  2200.   put "Print the list" && quote & activeListName & quote && "with or without thumbnails?" into dialogText
  2201.   dialogIt dialogText,"Cancel,Without,With"
  2202.   put the result into it
  2203.   if it = "Cancel" then exit mouseUp
  2204.   if it = "With" then printWithThumbnails returnHere
  2205.   else printNoThumbnails returnHere
  2206.   go returnHere
  2207.   set the scroll of fld "list" to listScroll
  2208.   if savedUserLevel <> empty then set the userLevel to savedUserLevel
  2209.   openCard
  2210. end mouseUp
  2211.  
  2212. on printWithThumbnails returnHere
  2213.   global activeListName, taggedList, entryPrefix
  2214.   set cursor to busy
  2215.   goListStack "print TN/odd"
  2216.   if the result = "no" then
  2217.     go returnHere
  2218.     exit to hypercard
  2219.   end if
  2220.   put "LIST NAME:" into cd fld "title to print"
  2221.   put activeListName after cd fld "title to print"
  2222.   put taggedList into pTaggedList
  2223.   put "top" into reference
  2224.   put 1 into i
  2225.   open printing
  2226.   repeat (the number of lines in pTaggedList/2) times
  2227.     if reference = "top" then
  2228.       go cd "print TN/odd"
  2229.       put "bottom" into reference
  2230.     else
  2231.       go cd "print TN/even"
  2232.       put "top" into reference
  2233.     end if
  2234.     set cursor to busy
  2235.     put line i of pTaggedList into line 1 of cd fld "list"
  2236.     put line (i+1) of pTaggedList into line 2 of cd fld "list"
  2237.     put line (i+1) of pTaggedList into fileName
  2238.     delete char 1 to (the length of entryPrefix) of fileName
  2239.     push cd
  2240.     go returnHere
  2241.     find fileName in fld "file name field"
  2242.     if the foundChunk <> empty AND cardPictureExists() then
  2243.       copyThumbnail
  2244.       put true into pictureOnClipboard
  2245.     else put false into pictureOnClipboard
  2246.     pop cd
  2247.     if pictureOnClipboard then
  2248.       type "V" with commandKey
  2249.       drag from 118,107 to 123,170
  2250.       choose browse tool
  2251.     end if
  2252.     print this cd
  2253.     removeCdPict
  2254.     add 2 to i
  2255.   end repeat
  2256.   close printing
  2257. end printWithThumbnails
  2258.  
  2259. on printNoThumbnails
  2260.   global activeListName, taggedList
  2261.   lock screen
  2262.   set lockMessages to true
  2263.   set cursor to busy
  2264.   put taggedList into pTaggedList
  2265.   push cd
  2266.   goListStack "print w/out TN top"
  2267.   if the result = "no" then
  2268.     pop cd
  2269.     exit to hypercard
  2270.   end if
  2271.   put "LIST NAME:" into cd fld "title to print"
  2272.   put activeListName after cd fld "title to print"
  2273.   put linesVisible(the name of cd fld "list") into linesShowing
  2274.   put the number of lines in pTaggedList into numberOfLines
  2275.   put (the textHeight of cd fld "list") into pTextHeight
  2276.   put numberOfLines/pTextHeight into thisMany
  2277.   put trunc(thisMany) into thisMany
  2278.   put numberOfLines mod pTextHeight into remainder
  2279.   put abs(remainder) into remainder
  2280.   if remainder > 0 then add 1 to thisMany
  2281.   put "top" into reference
  2282.   open printing
  2283.   repeat thisMany times
  2284.     if reference = "top" then
  2285.       go cd "print w/out TN top"
  2286.       put "bottom" into reference
  2287.     else
  2288.       go cd "print w/out TN bottom"
  2289.       put "top" into reference
  2290.     end if
  2291.     set cursor to busy
  2292.     put pTaggedList into cd fld "list"
  2293.     set scroll of cd fld "list" to 0
  2294.     print this cd
  2295.     repeat with i = 1 to linesShowing
  2296.       delete line 1 of pTaggedList
  2297.     end repeat
  2298.   end repeat
  2299.   close printing
  2300. end printNoThumbnails
  2301.  
  2302.  
  2303.  
  2304. -- part 325 (button)
  2305. -- low flags: 80
  2306. -- high flags: A002
  2307. -- rect: left=376 top=282 right=306 bottom=421
  2308. -- title width / last selected line: 0
  2309. -- icon id / first selected line: 0 / 0
  2310. -- text alignment: 1
  2311. -- font id: 200
  2312. -- text size: 12
  2313. -- style flags: 0
  2314. -- line height: 16
  2315. -- part name: Save
  2316. ----- HyperTalk script -----
  2317. on mouseUp
  2318.   global changesToList,listScroll,taggedList
  2319.   set cursor to busy
  2320.   put the scroll of fld "list" into listScroll
  2321.   put the long name of this cd into returnHere
  2322.   --changesToList = true if changes have been made to the list
  2323.   if changesToList then saveChanges false,taggedList,true
  2324.   go returnHere
  2325.   set the scroll of fld "list" to listScroll
  2326.   openCard
  2327. end mouseUp
  2328.  
  2329.  
  2330. -- part 10 (button)
  2331. -- low flags: 00
  2332. -- high flags: 0000
  2333. -- rect: left=142 top=313 right=335 bottom=160
  2334. -- title width / last selected line: 0
  2335. -- icon id / first selected line: 28600 / 28600
  2336. -- text alignment: 1
  2337. -- font id: 200
  2338. -- text size: 10
  2339. -- style flags: 0
  2340. -- line height: 13
  2341. -- part name: Next
  2342. ----- HyperTalk script -----
  2343. on mouseDown
  2344.   global ticksToWait
  2345.   if the commandKey is down then
  2346.     send setBrowseSpeed to bg btn "management"
  2347.     exit mouseDown
  2348.   end if
  2349.   set hilite of me to true
  2350.   go next cd of this bg
  2351.   repeat while the mouse is down
  2352.     put (the ticks + ticksToWait) into stopTicks
  2353.     repeat until stopTicks < (the ticks)
  2354.       if the mouse is up then
  2355.         set hilite of me to false
  2356.         exit mouseDown
  2357.       end if
  2358.     end repeat
  2359.     go next cd of this bg
  2360.   end repeat
  2361.   set hilite of me to false
  2362. end mouseDown
  2363.  
  2364.  
  2365. -- part 353 (button)
  2366. -- low flags: 80
  2367. -- high flags: A002
  2368. -- rect: left=247 top=57 right=77 bottom=498
  2369. -- title width / last selected line: 0
  2370. -- icon id / first selected line: 0 / 0
  2371. -- text alignment: 1
  2372. -- font id: 0
  2373. -- text size: 12
  2374. -- style flags: 0
  2375. -- line height: 16
  2376. -- part name: List Name: Untitled
  2377. ----- HyperTalk script -----
  2378. on mouseUp
  2379.   global activeListName,taggedList,changesToList
  2380.   put the long name of this cd into returnHere
  2381.   set cursor to busy
  2382.   checkListName "Save the open list as:", activeListName
  2383.   if the result <> empty then
  2384.     go returnHere
  2385.     openCard
  2386.     exit mouseUp
  2387.   end if
  2388.   --The list name given is valid and is in the global activeListName.
  2389.   --You are in the list stack.
  2390.   put taggedList into fld "tagged list"
  2391.   put false into changesToList
  2392.   go returnHere
  2393.   showListName
  2394.   openCard
  2395. end mouseUp
  2396.  
  2397.  
  2398. -- part 312 (button)
  2399. -- low flags: 80
  2400. -- high flags: 8002
  2401. -- rect: left=240 top=312 right=336 bottom=350
  2402. -- title width / last selected line: 0
  2403. -- icon id / first selected line: 0 / 0
  2404. -- text alignment: 1
  2405. -- font id: 200
  2406. -- text size: 12
  2407. -- style flags: 0
  2408. -- line height: 16
  2409. -- part name: Add This Graphic
  2410. ----- HyperTalk script -----
  2411. on mouseUp
  2412.   global taggedList,entryPrefix,changesToList,entrySuffix
  2413.   set cursor to busy
  2414.   --Do this hiliting manually, since the user may have hit control-A
  2415.   --to activate this button
  2416.   --(See the background script handler "controlKey").
  2417.   set hilite of me to true
  2418.   set hilite of me to false
  2419.   --
  2420.   put true into changesToList
  2421.   put (the number of lines in taggedList + 1) into lastLine
  2422.   put (lastLine / 2 + .5) into entryNo
  2423.   if entryNo >= 500 then
  2424.     dialogIt "Each list is limited to 500 entries." && "This graphic was not added to your list."
  2425.     exit mouseUp
  2426.   end if
  2427.   put beginEntryLine(entryNo) into beginLine
  2428.   lock screen
  2429.   put beginLine & entryNo & entrySuffix into newEntry
  2430.   if line 1 of fld "description field" is empty then
  2431.     put "none" after newEntry
  2432.   else
  2433.     put line 1 of fld "description field" after newEntry
  2434.   end if
  2435.   put return & entryPrefix & fld "file name field" after newEntry
  2436.   put newEntry into line lastLine of taggedList
  2437.   if the visible of bg fld "list" then
  2438.     put newEntry into line lastLine of fld "list"
  2439.     setScroll (lastLine+1)
  2440.   end if
  2441. end mouseUp
  2442.  
  2443. on setScroll lastLine
  2444.   if lastLine > linesVisible(the name of fld "list") then
  2445.     repeat 2 times
  2446.       set scroll of fld "list" to (the scroll of fld "list" + the textHeight of fld "list")
  2447.     end repeat
  2448.   end if
  2449. end setScroll
  2450.  
  2451.  
  2452.  
  2453. -- part 313 (button)
  2454. -- low flags: 80
  2455. -- high flags: A002
  2456. -- rect: left=349 top=312 right=336 bottom=432
  2457. -- title width / last selected line: 0
  2458. -- icon id / first selected line: 0 / 0
  2459. -- text alignment: 1
  2460. -- font id: 200
  2461. -- text size: 12
  2462. -- style flags: 0
  2463. -- line height: 16
  2464. -- part name: Delete #…
  2465. ----- HyperTalk script -----
  2466. on mouseUp
  2467.   global taggedList,changesToList
  2468.   deleteListEntries (the name of bg fld "list")
  2469.   if fld "list" is not taggedList then
  2470.     --a change was made
  2471.     put fld "list" into taggedList
  2472.     put true into changesToList
  2473.   end if
  2474. end mouseUp
  2475.  
  2476.  
  2477. -- part 385 (button)
  2478. -- low flags: 00
  2479. -- high flags: A000
  2480. -- rect: left=239 top=62 right=77 bottom=309
  2481. -- title width / last selected line: 0
  2482. -- icon id / first selected line: 0 / 0
  2483. -- text alignment: 0
  2484. -- font id: 200
  2485. -- text size: 10
  2486. -- style flags: 0
  2487. -- line height: 13
  2488. -- part name: Description:
  2489. ----- HyperTalk script -----
  2490. on mouseUp
  2491.   send findName to bg btn "find‚Ķ"
  2492. end mouseUp
  2493.  
  2494.  
  2495.  
  2496. -- part 398 (button)
  2497. -- low flags: 80
  2498. -- high flags: 8004
  2499. -- rect: left=8 top=8 right=27 bottom=123
  2500. -- title width / last selected line: 0
  2501. -- icon id / first selected line: 0 / 0
  2502. -- text alignment: 1
  2503. -- font id: 200
  2504. -- text size: 12
  2505. -- style flags: 0
  2506. -- line height: 16
  2507. -- part name: Catalog
  2508. ----- HyperTalk script -----
  2509. --‚Ä¢ SYSTEM MESSAGES
  2510.  
  2511. on mouseDown
  2512.   global catalogMenu
  2513.   get menuPop(the name of me)
  2514.   put item 1 of it into menuT
  2515.   put item 2 of it into menuL
  2516.   put BigPop(catalogMenu,menuT,menuL) into theChoice
  2517.   if theChoice = 1 then catalogFolder
  2518.   else if theChoice = 2 then catalogOneFile
  2519.   set the hilite of me to false
  2520. end mouseDown
  2521.  
  2522. --‚Ä¢ MESSAGE HANDLERS
  2523.  
  2524. --‚Ä¢ These handlers determine which directory or file need to be
  2525. --‚Ä¢ catalogued.
  2526.  
  2527. on catalogFolder
  2528.   put folderName("Select a folder to catalog:") into thisFolder
  2529.   if thisFolder is empty then exit catalogFolder
  2530.   toggleLockScreen
  2531.   catalogValidFiles thisFolder
  2532. end catalogFolder
  2533.  
  2534. on catalogOneFile
  2535.   put getFileName("Catalog which file?") into fileInfo
  2536.   if fileInfo is empty then exit catalogOneFile
  2537.   toggleLockScreen
  2538.   put the number of items in fileInfo into numberOfItems
  2539.   put item numberOfItems of fileInfo into fileType
  2540.   put item 1 to (numberOfItems - 1) of fileInfo into longName
  2541.   push cd
  2542.   importGraphic longName,fileType
  2543.   if the result then
  2544.     -- This is a new file.
  2545.     put getShortName(longName) into fileName
  2546.     assignText fileName
  2547.   else
  2548.     -- The file already exists.
  2549.     pop card
  2550.     dialogIt "A card that references the file ‚Äú" & getShortName(longName) & "‚Äù already exists."
  2551.   end if
  2552. end catalogOneFile
  2553.  
  2554. --‚Ä¢ These handlers catalog the files.
  2555.  
  2556. on catalogValidFiles thisDirectory
  2557.   -- Fill in some variables.
  2558.   put the name of this cd into returnHere
  2559.   put getValidFiles(thisDirectory) into validFiles
  2560.   -- Check for errors in the result.
  2561.   if validFiles is empty then exit catalogValidFiles
  2562.   if item 1 of line 1 of validFiles contains "there was an error" then
  2563.     dialogIt "There was an error reading the data."
  2564.     exit catalogValidFiles
  2565.   end if
  2566.   -- Everything appears to be OK, so catalog the valid files.
  2567.   put empty into alreadyExists
  2568.   put empty into newGraphics
  2569.   put "Cataloguing the new files" into status
  2570.   put the number of lines in validFiles into thisManyLines
  2571.   -- Check out each of the files.
  2572.   repeat with N = 1 to thisManyLines
  2573.     showProgress status,round(N/(thisManyLines)*100)
  2574.     if not diskSpaceAvailable() then
  2575.       put empty
  2576.       exit catalogValidFiles
  2577.     end if
  2578.     put line 1 of validFiles into thisFile
  2579.     -- Parse out the file type and file name.
  2580.     put (the number of items in thisFile - 2) into typeItem
  2581.     put item typeItem of thisFile into fileType
  2582.     repeat 3 times
  2583.       delete last item of thisFile
  2584.     end repeat
  2585.     -- Make sure there is enough RAM to continue.
  2586.     if NOT memoryAvailable(75) then doMenu "quit hypercard"
  2587.     importGraphic thisFile,fileType
  2588.     -- Remember the files for the wrap-up dialogs.
  2589.     if the result then
  2590.       put getShortName(thisFile) & return after newGraphics
  2591.     else put getShortName(thisFile) & return after alreadyExists
  2592.     delete line 1 of validFiles
  2593.   end repeat
  2594.   hideProgress
  2595.   -- All of the valid files have been catalogued.
  2596.   checkDocuments
  2597.   if alreadyExists is NOT empty then showExisting alreadyExists
  2598.   if newGraphics is empty then
  2599.     go returnHere
  2600.     sayNoNewGraphics
  2601.   else
  2602.     showNew newGraphics,"Cards were created for these file names."
  2603.     assignText newGraphics
  2604.   end if
  2605. end catalogValidFiles
  2606.  
  2607. --‚Ä¢ These handlers do the work of putting pictures and text
  2608. --‚Ä¢ onto the card.
  2609.  
  2610. on importGraphic longName,fileType
  2611.   -- Catalogs the given file into the stack.
  2612.   -- Return true if the given graphic is not already catalogued, else
  2613.   -- return false.
  2614.   set cursor to watch
  2615.   lock screen
  2616.   put getShortName(longName) into fileName
  2617.   if fileAlreadyCatalogued(fileName,fileType) then return false
  2618.   -- This is a new graphic. Check to see if a new card is needed.
  2619.   if bgCard() is NOT 1 OR bg fld "file name field" is NOT empty then
  2620.     go last cd of this bg
  2621.     doMenu "new card"
  2622.   end if
  2623.   writeToCard longName,fileType,fileName,newGraphics
  2624.   return true
  2625. end importGraphic
  2626.  
  2627. function fileAlreadyCatalogued fileName,fileType
  2628. -- Returns true if the given information is already catalogued.
  2629. -- Else, returns false.
  2630. put empty into firstCard
  2631. put empty into currentCard
  2632. go cd 1 of bg "the collection"
  2633. put false into theAnswer
  2634. repeat
  2635.   find whole fileName in fld "file name field"
  2636.   if the foundChunk is empty then
  2637.     -- The text was not found.
  2638.     exit repeat
  2639.   end if
  2640.   if the short name of this bg is "the collection" then
  2641.     if fileName is fld "file name field" AND fileType is fld "format field" then
  2642.       -- This is info is already catalogued.
  2643.       put true into theAnswer
  2644.       exit repeat
  2645.     end if
  2646.   end if
  2647.   -- The file name was found, but it was not an exact match.
  2648.   if firstCard is empty then
  2649.     -- This is the first time through.
  2650.     put the id of this cd into firstCard
  2651.   else put the id of this cd into currentCard
  2652.   if firstCard = currentCard then
  2653.     -- You've seen all of the appropriate cards.
  2654.     exit repeat
  2655.   end if
  2656. end repeat
  2657. if the short name of this bg is NOT "the collection" then
  2658.   go bg "the collection"
  2659. end if
  2660. return theAnswer
  2661. end fileAlreadyCatalogued
  2662.  
  2663. on writeToCard longName,fileType,fileName,newGraphics
  2664.   -- Write the given info to the card, including the file name, type,
  2665.   -- path, thumbnail.
  2666.   setCdNo
  2667.   put fileName into fld "file name field"
  2668.   put fileType into fld "format field"
  2669.   set cursor to watch
  2670.   displayTiny longName
  2671.   if the result is not empty then
  2672.     -- There was an error.
  2673.     doMenu "delete card"
  2674.     exit writeToCard
  2675.   end if
  2676.   repeat until not the lockScreen
  2677.     --repeat until the screen is unlocked
  2678.     unlock screen with visual effect wipe left
  2679.   end repeat
  2680.   put fileName & return after newGraphics
  2681.   put getPath(longName) into pathName
  2682.   put cd fld "paths to graphics" of cd "Index storage" into existPaths
  2683.   if not isWithin(pathName,existPaths) then
  2684.     put pathName into line (the number of lines in existPaths + 1) of existPaths
  2685.     put existPaths into cd fld "paths to graphics" of cd "Index storage"
  2686.   end if
  2687. end writeToCard
  2688.  
  2689. on assignText newGraphics
  2690.   set cursor to watch
  2691.   toggleLockScreen
  2692.   put empty into prevName
  2693.   put 1 into counter
  2694.   repeat until not the lockScreen
  2695.     --repeat until the screen is unlocked
  2696.     unlock screen
  2697.   end repeat
  2698.   repeat the number of lines in newGraphics times
  2699.     put line 1 of newGraphics into thisGraphic
  2700.     -- Go to the card that references this file.
  2701.     find whole thisGraphic in fld "file name field"
  2702.     visual effect wipe left
  2703.     setCdNo
  2704.     if shallWeContinue(counter,newGraphics) is "No" then exit repeat
  2705.     toggleLockScreen
  2706.     --Assign text to this card.
  2707.     assignDescription
  2708.     assignToCard "keyword","keywords field","Keyword Index"
  2709.     send assignBook to bg btn "Card"
  2710.     delete line 1 of newGraphics
  2711.     add 1 to counter
  2712.   end repeat
  2713.   openCard
  2714. end assignText
  2715.  
  2716. on assignDescription
  2717.   global prevName
  2718.   put fld "file name field" into fileName
  2719.   toggleLockScreen
  2720.   ask "Enter a description for" && quote & fileName & quote & "." with prevName
  2721.   if it is empty then exit assignDescription
  2722.   else put it into prevName
  2723.   toggleLockScreen
  2724.   put char 1 to 30 of prevName into fld "description field"
  2725.   if the length of prevName > 30 then
  2726.     put "‚Ķ" after fld "description field"
  2727.     put prevName into line 2 of fld "description field"
  2728.   end if
  2729. end assignDescription
  2730.  
  2731. --‚Ä¢ These handler put up dialog boxes to tell you what's going on.
  2732.  
  2733. on sayNoNewGraphics
  2734.   toggleLockScreen
  2735.   dialogIt "There were no new file names."
  2736.   toggleLockScreen
  2737. end sayNoNewGraphics
  2738.  
  2739. on sayDuplicateExists
  2740.   toggleLockScreen
  2741.   put getShortName(longName) into fileName
  2742.   dialogIt "A file with the name ‚Äú" & fileName & "‚Äù is already catalogued.","OK"
  2743.   toggleLockScreen
  2744. end sayDuplicateExists
  2745.  
  2746. --‚Ä¢ FUNCTIONS
  2747.  
  2748. function getValidFiles thisDirectory
  2749. --‚Ä¢ Search the given directory for valid files.
  2750. set cursor to watch
  2751. put OurFileInfo(thisDirectory,1) into validFiles
  2752. if validFiles is empty then
  2753.   dialogIt "No valid graphic files were found in the directory" & return & "‚Äú" & thisDirectory & "‚Äù."
  2754.   return empty
  2755. end if
  2756. return validFiles
  2757. end getValidFiles
  2758.  
  2759. function shallWeContinue counter,newGraphics
  2760. toggleLockScreen
  2761. put bg fld "file name field" into fileName
  2762. put the number of lines in newGraphics into N
  2763. -- Fill in the first phrase
  2764. if counter = 1 then
  2765.   --This is the first time through, so begin the dialog box with this.
  2766.   put N & space into firstPhrase
  2767.   if N = 1 then put "card was" after firstPhrase
  2768.   else put "cards were" after firstPhrase
  2769.   put space & "added to the stack." after firstPhrase
  2770. else
  2771.   -- Let the person know how many cards are left.
  2772.   if N = 1 then put "There is 1 new card left." into firstPhrase
  2773.   else put "There are" && N && "new cards left." into firstPhrase
  2774. end if
  2775. -- Fill in second phrase
  2776. put "The current card references the file" && quote & fileName & quote & "." into secondPhrase
  2777. -- Fill in third phrase
  2778. put "Do you want to" into thirdPhrase
  2779. if N = 1 then
  2780.   put space & "enter information for this new card?" after thirdPhrase
  2781. else
  2782.   put space & "continue entering information for these new cards?" after thirdPhrase
  2783. end if
  2784. dialogIt firstPhrase & space & secondPhrase & space & thirdPhrase, "No,Yes"
  2785. return the result
  2786. end shallWeContinue
  2787.  
  2788. function memoryAvailable lowerLimit
  2789. -- This handler checks available RAM (the heapspace) against the
  2790. -- given lowerLimit. If the available memory is less than lowerLimit
  2791. -- return false. Else, return true.
  2792. if (the heapSpace / 1024) < lowerLimit then
  2793.   dialogIt "You have only" && the heapspace / 1024 && "RAM available. You should quit HyperCard to avoid losing" && "data.","Continue,Quit"
  2794.   if the result is "quit" then return false
  2795. end if
  2796. return true
  2797. end memoryAvailable
  2798.  
  2799.  
  2800. -- part 405 (button)
  2801. -- low flags: 00
  2802. -- high flags: 8000
  2803. -- rect: left=240 top=28 right=50 bottom=407
  2804. -- title width / last selected line: 0
  2805. -- icon id / first selected line: 0 / 0
  2806. -- text alignment: 1
  2807. -- font id: 200
  2808. -- text size: 12
  2809. -- style flags: 0
  2810. -- line height: 16
  2811. -- part name: About This Graphic
  2812. ----- HyperTalk script -----
  2813. on mouseUp
  2814.   send mouseUp to bg btn "graphics view"
  2815. end mouseUp
  2816.  
  2817.  
  2818.  
  2819. -- part 406 (button)
  2820. -- low flags: 00
  2821. -- high flags: A000
  2822. -- rect: left=64 top=283 right=305 bottom=135
  2823. -- title width / last selected line: 0
  2824. -- icon id / first selected line: 0 / 0
  2825. -- text alignment: 1
  2826. -- font id: 200
  2827. -- text size: 12
  2828. -- style flags: 0
  2829. -- line height: 16
  2830. -- part name: Find Again
  2831. ----- HyperTalk script -----
  2832. on mouseUp
  2833.   global findParams
  2834.   if findParams is empty then answer "Find something first."
  2835.   else do findParams
  2836. end mouseUp
  2837.  
  2838.  
  2839.  
  2840. -- part 416 (button)
  2841. -- low flags: 00
  2842. -- high flags: 8000
  2843. -- rect: left=408 top=28 right=50 bottom=504
  2844. -- title width / last selected line: 0
  2845. -- icon id / first selected line: 0 / 0
  2846. -- text alignment: 1
  2847. -- font id: 200
  2848. -- text size: 12
  2849. -- style flags: 0
  2850. -- line height: 16
  2851. -- part name: AGS Lists
  2852. ----- HyperTalk script -----
  2853. on mouseUp
  2854.   send mouseUp to bg btn "lists view"
  2855. end mouseUp
  2856.  
  2857.  
  2858.  
  2859. -- part 417 (field)
  2860. -- low flags: 81
  2861. -- high flags: 2004
  2862. -- rect: left=254 top=288 right=331 bottom=489
  2863. -- title width / last selected line: 0
  2864. -- icon id / first selected line: 0 / 0
  2865. -- text alignment: 0
  2866. -- font id: 200
  2867. -- text size: 12
  2868. -- style flags: 0
  2869. -- line height: 16
  2870. -- part name: Delete msg
  2871.  
  2872.  
  2873. -- part 387 (button)
  2874. -- low flags: 80
  2875. -- high flags: 8002
  2876. -- rect: left=430 top=310 right=324 bottom=479
  2877. -- title width / last selected line: 0
  2878. -- icon id / first selected line: 0 / 0
  2879. -- text alignment: 1
  2880. -- font id: 200
  2881. -- text size: 10
  2882. -- style flags: 0
  2883. -- line height: 13
  2884. -- part name: Done
  2885. ----- HyperTalk script -----
  2886. on mouseUp
  2887.   deleteEntryVisible false
  2888. end mouseUp
  2889.  
  2890.  
  2891. -- part 421 (button)
  2892. -- low flags: 00
  2893. -- high flags: 4006
  2894. -- rect: left=241 top=29 right=49 bottom=407
  2895. -- title width / last selected line: 0
  2896. -- icon id / first selected line: 17764 / 17764
  2897. -- text alignment: 1
  2898. -- font id: 200
  2899. -- text size: 14
  2900. -- style flags: 0
  2901. -- line height: 18
  2902. -- part name: Graphics View
  2903. ----- HyperTalk script -----
  2904. on mouseUp
  2905.   changeView "graphics view"
  2906. end mouseUp
  2907.  
  2908.  
  2909. -- part 420 (button)
  2910. -- low flags: 00
  2911. -- high flags: 0006
  2912. -- rect: left=408 top=28 right=49 bottom=504
  2913. -- title width / last selected line: 0
  2914. -- icon id / first selected line: 17764 / 17764
  2915. -- text alignment: 1
  2916. -- font id: 200
  2917. -- text size: 12
  2918. -- style flags: 0
  2919. -- line height: 16
  2920. -- part name: Lists View
  2921. ----- HyperTalk script -----
  2922. on mouseUp
  2923.   changeView "lists view"
  2924. end mouseUp
  2925.  
  2926.  
  2927. -- part 403 (field)
  2928. -- low flags: 81
  2929. -- high flags: 2004
  2930. -- rect: left=91 top=30 right=56 bottom=422
  2931. -- title width / last selected line: 0
  2932. -- icon id / first selected line: 0 / 0
  2933. -- text alignment: 1
  2934. -- font id: 0
  2935. -- text size: 12
  2936. -- style flags: 0
  2937. -- line height: 16
  2938. -- part name: status
  2939. ----- HyperTalk script -----
  2940. --This object AGS only.
  2941.  
  2942. on mouseUp
  2943.   hide me
  2944. end mouseUp
  2945.  
  2946.  
  2947. -- part 451 (button)
  2948. -- low flags: 00
  2949. -- high flags: C000
  2950. -- rect: left=242 top=314 right=334 bottom=325
  2951. -- title width / last selected line: 0
  2952. -- icon id / first selected line: 0 / 0
  2953. -- text alignment: 1
  2954. -- font id: 200
  2955. -- text size: 12
  2956. -- style flags: 0
  2957. -- line height: 16
  2958. -- part name: Hardware
  2959. ----- HyperTalk script -----
  2960. on mouseUp
  2961.   goStack (the short name of me)
  2962. end mouseUp
  2963.  
  2964.  
  2965.  
  2966. -- part 452 (button)
  2967. -- low flags: 00
  2968. -- high flags: 8000
  2969. -- rect: left=328 top=314 right=334 bottom=415
  2970. -- title width / last selected line: 0
  2971. -- icon id / first selected line: 0 / 0
  2972. -- text alignment: 1
  2973. -- font id: 200
  2974. -- text size: 12
  2975. -- style flags: 0
  2976. -- line height: 16
  2977. -- part name: Networks
  2978. ----- HyperTalk script -----
  2979. on mouseUp
  2980.   goStack (the short name of me)
  2981. end mouseUp
  2982.  
  2983.  
  2984.  
  2985. -- part 453 (button)
  2986. -- low flags: 00
  2987. -- high flags: 8000
  2988. -- rect: left=418 top=314 right=334 bottom=502
  2989. -- title width / last selected line: 0
  2990. -- icon id / first selected line: 0 / 0
  2991. -- text alignment: 1
  2992. -- font id: 200
  2993. -- text size: 12
  2994. -- style flags: 0
  2995. -- line height: 16
  2996. -- part name: Technical
  2997. ----- HyperTalk script -----
  2998. on mouseUp
  2999.   goStack (the short name of me)
  3000. end mouseUp
  3001.  
  3002.  
  3003.  
  3004. -- part 454 (button)
  3005. -- low flags: 00
  3006. -- high flags: A000
  3007. -- rect: left=136 top=283 right=305 bottom=192
  3008. -- title width / last selected line: 0
  3009. -- icon id / first selected line: 0 / 0
  3010. -- text alignment: 1
  3011. -- font id: 200
  3012. -- text size: 12
  3013. -- style flags: 0
  3014. -- line height: 16
  3015. -- part name: Go Back
  3016. ----- HyperTalk script -----
  3017. on mouseUp
  3018.   go back
  3019. end mouseUp
  3020.  
  3021.  
  3022.  
  3023. -- part 455 (button)
  3024. -- low flags: 00
  3025. -- high flags: 8000
  3026. -- rect: left=193 top=283 right=305 bottom=232
  3027. -- title width / last selected line: 0
  3028. -- icon id / first selected line: 0 / 0
  3029. -- text alignment: 1
  3030. -- font id: 200
  3031. -- text size: 12
  3032. -- style flags: 0
  3033. -- line height: 16
  3034. -- part name: Help
  3035. ----- HyperTalk script -----
  3036. --PASTE THE HELP FUNCTIONS OVER THE EXISTING FUNCTIONS IN THIS SCRIPT
  3037.  
  3038. on mouseUp
  3039.   global cardMenu, catalogMenu, managementMenu, indexesMenu
  3040.   set hilite of me to true
  3041.   showHelp (not the visible of fld "banner")
  3042.   displayHelp "Banner"
  3043.   set cursor to 16
  3044.   repeat
  3045.  
  3046.     --if they have one of these keys down, it may indicate they
  3047.     --are a bit confused or just want to move on, so exit.
  3048.     if the commandKey is down then
  3049.       cleanExit
  3050.       exit repeat
  3051.     end if
  3052.     if the optionKey is down then
  3053.       cleanExit
  3054.       exit mouseUp
  3055.     end if
  3056.  
  3057.     if the mouse is down then
  3058.       --the user clicked somewhere
  3059.       put the mouseLoc into userLoc
  3060.       if item 1 of userLoc < 0 OR item 1 of userLoc > 512 OR item 2 of userLoc < -15 OR item 2 of userLoc > 345
  3061.       then
  3062.       --you clicked outside of the card
  3063.       cleanExit
  3064.       exit mouseUp
  3065.     end if
  3066.  
  3067.     --menus
  3068.     if userLoc is within the rect of bg btn "Card" then
  3069.       menuHelp cardMenu, "Card"
  3070.     end if
  3071.     if userLoc is within the rect of bg btn "catalog" then
  3072.       menuHelp catalogMenu, "catalog"
  3073.     end if
  3074.     if userLoc is within the rect of bg btn "Management" then
  3075.       menuHelp ManagementMenu, "Management"
  3076.     end if
  3077.     if userLoc is within the rect of bg btn "Indexes" then
  3078.       menuHelp indexesMenu, "Indexes"
  3079.     end if
  3080.  
  3081.     --btns whose names may change or have names that HyperTalk
  3082.     --doesn't like
  3083.     if userLoc is within the rect of bg btn id 216 then
  3084.       displayHelp "Card Number Btn"
  3085.     end if
  3086.     if userLoc is within the rect of bg btn id 353 then
  3087.       displayHelpByID "list Name","353"
  3088.     end if
  3089.     if userLoc is within the rect of bg btn id 313 then
  3090.       displayHelpBtn "Delete #‚Ķ"
  3091.     end if
  3092.  
  3093.     --help objects
  3094.     if userLoc is within the rect of fld "banner" then
  3095.       displayHelpFld "banner"
  3096.     end if
  3097.     if userLoc is within the rect of bg btn "Help Close" OR userLoc is within the rect of bg btn "help" then
  3098.       cleanExit
  3099.       exit mouseUp
  3100.     end if
  3101.     if userLoc is within the rect of bg btn "Help Section" then
  3102.       displayHelp "banner"
  3103.     end if
  3104.     if the mouseLoc is within the rect of bg btn "Help Close" OR the mouseLoc is within the rect of bg btn "Help" then
  3105.       set cursor to arrow
  3106.     end if
  3107.  
  3108.     --other btns
  3109.     repeat with i = 1 to the number of bg btns
  3110.       if userLoc is within the rect of bg btn i then
  3111.         --check for all of the exceptions
  3112.         put id of bg btn i into thisID
  3113.         put the short name of bg btn i into thisName
  3114.         --check to see if there is help on this button
  3115.         if the short name of bg btn i = "info blanket" OR thisID = 216 OR thisID = 353 OR thisID = 313 OR thisName = "Card" OR thisName = "catalog" OR thisName = "management" OR thisName = "indexes" OR thisName = "lists view" or thisName = "graphics view" OR thisName = "menu blanket" then next repeat
  3116.         else
  3117.           --there is help on this button
  3118.           displayHelpBtn (the short name of bg btn i)
  3119.         end if
  3120.       end if
  3121.     end repeat
  3122.  
  3123.     --flds
  3124.     repeat with i = 1 to the number of bg flds
  3125.       if userLoc is within the rect of fld i then
  3126.         displayHelpFld (the short name of fld i)
  3127.       end if
  3128.     end repeat
  3129.     set cursor to 16
  3130.   end if
  3131. end repeat
  3132. end mouseUp
  3133.  
  3134. on displayHelpByID messageText,btnId
  3135.   if the visible of bg btn id btnId then displayHelp messageText
  3136.   else exit displayHelpByID
  3137. end displayHelpByID
  3138.  
  3139. on displayHelpFld messageText
  3140.   if the visible of fld messageText then displayHelp messageText
  3141.   else exit displayHelpFld
  3142. end displayHelpFld
  3143.  
  3144. on displayHelpBtn messageText
  3145.   if the visible of bg btn messageText then displayHelp messageText
  3146.   else exit displayHelpBtn
  3147. end displayHelpBtn
  3148.  
  3149. on displayHelp messageText
  3150.   put messageText into helpFunction
  3151.   put substitute("#","",helpFunction) into helpFunction
  3152.   put substitute(":","",helpFunction) into helpFunction
  3153.   put substitute("‚Ķ","",helpFunction) into helpFunction
  3154.   put substitute(" ","",helpFunction) into helpFunction
  3155.   put "()" after helpFunction
  3156.   do "get" && helpFunction
  3157.   put it into fld "banner"
  3158. end displayHelp
  3159.  
  3160. on cleanExit
  3161.   set the icon of bg btn "Help Close" to 3358
  3162.   showHelp false
  3163.   set the icon of bg btn "Help Close" to 3071
  3164.   put empty into fld "banner"
  3165. end cleanExit
  3166.  
  3167. on menuHelp menu,btnName
  3168.   if the visible of bg btn btnName is false then exit menuHelp
  3169.   set hilite of bg btn btnName to true
  3170.   get menuPop("bg btn" && btnName)
  3171.   put item 1 of it into menuT
  3172.   put item 2 of it into menuL
  3173.   get BigPop(menu,menuT,menuL)
  3174.   set hilite of bg btn btnName to false
  3175.   if it is empty then exit menuHelp
  3176.   else displayHelp (line it of menu)
  3177. end menuHelp
  3178.  
  3179. ----------------------------------------------------------------------
  3180. --PASTE THE NEW HELP FUNCTIONS AFTER THIS LINE
  3181. ----------------------------------------------------------------------
  3182.  
  3183. function PrintCardsfromBook
  3184. return "Choose Print Cards from Book from the Management button to print all of the cards from a selected book." & return
  3185. end PrintCardsfromBook
  3186.  
  3187. function GoBack
  3188. return "Click Go Back to return to cards you‚Äôve previously been to." & return
  3189. end GoBack
  3190.  
  3191. function Hardware
  3192. return "Apple Graphics Source is divided into three stacks: Hardware, Networks, and Technical. Click one of these buttons to go to that stack." & return
  3193. end Hardware
  3194.  
  3195. function Networks
  3196. return "Apple Graphics Source is divided into three stacks: Hardware, Networks, and Technical. Click one of these buttons to go to that stack." & return
  3197. end Networks
  3198.  
  3199. function Technical
  3200. return "Apple Graphics Source is divided into three stacks: Hardware, Networks, and Technical. Click one of these buttons to go to that stack." & return
  3201. end Technical
  3202.  
  3203. function AboutThisGraphic
  3204. return "About This Graphic displays information about the current graphic (for example, it‚Äôs description, file name, keywords, etc.). " & return
  3205. end AboutThisGraphic
  3206.  
  3207. function AGSLists
  3208. return "AGS Lists displays the open list and hides information about the current graphic." & return &return &"To add graphics to the open list, click Add This Graphic. To save a list, click Save. To go to a graphic in the list, click its entry in the list." & return
  3209. end AGSLists
  3210.  
  3211. function AssignKeyword
  3212. return "Assign Keyword enables you to select an existing keyword or keywords to assign to the current graphic." & return
  3213. end AssignKeyword
  3214.  
  3215. function AssignBook
  3216. return "Assign Book enables you to select an existing book to assign to the current graphic." & return
  3217. end AssignBook
  3218.  
  3219. function CardNumberBtn
  3220. return "This button gives you information about your location in the stack. Click it as a short-cut to using Find to locate a card by its number." & return
  3221. end CardNumberBtn
  3222.  
  3223. function Quit
  3224. return "Quit closes the stack and leaves HyperCard." & return
  3225. end Quit
  3226.  
  3227. function Find
  3228. return "Click Find to search for graphics by different criteria (for example, File Name, Format, Keywords, etc.)" & return
  3229. end Find
  3230.  
  3231. function FindAgain
  3232. return "Click Find Again to continue with your last search." & return
  3233. end FindAgain
  3234.  
  3235. function BuildAllIndexes
  3236. return "Choose Build All Indexes to build all of the indexes in the stack." & return
  3237. end BuildAllIndexes
  3238.  
  3239. function BuildFileNameIndex
  3240. return "Choose Build File Name Index to store all of the file names in an index. This needs to be done before you release the stack." & return
  3241. end BuildFileNameIndex
  3242.  
  3243. function BuildFileFormatIndex
  3244. return "Choose Build File Format Index to store all of the file formats in an index. This needs to be done before you release the stack." & return
  3245. end BuildFileFormatIndex
  3246.  
  3247. function FormatDescription
  3248. return "Choose Format Description to format the text in the description field. Formatting in this case means to put the first 31 characters followed by an ellipsis into the first" & return &"(visible) of the field. The entire description is stored in the rest of the field." & return
  3249. end FormatDescription
  3250.  
  3251. function Delete
  3252. return "Click Delete #  to delete entries from the open list." & return &return &"After you click Delete #,click on the list entries you want to remove. When you are finished deleting entries, click Done." & return
  3253. end Delete
  3254.  
  3255. function NewList
  3256. return "New List opens a new, empty list named Untitled.  If another list is already open, the stack closes it " & return &"(after prompting you to save changes) before opening a new list. Only one list can be open at a time." & return &return &"To add items to the list, click Add This Graphic to List (or press control-A). " & return
  3257. end NewList
  3258.  
  3259. function ListName
  3260. return "This is the name of the open list." & return
  3261. end ListName
  3262.  
  3263. function DeleteList
  3264. return "Delete List erases the list that you specify. Click Delete List when you no longer need a particular list." & return
  3265. end DeleteList
  3266.  
  3267. function PrintList
  3268. return "Print List prints the open list. You can print a list along with the thumbnail sketches of the list items, or print just the text of the list (the descriptions and file name of the items)." & return
  3269. end PrintList
  3270.  
  3271. function Save
  3272. return "Save saves a list to disk." & return
  3273. end Save
  3274.  
  3275. function FileName
  3276. return "Click File Name as a short-cut to clicking Find and searching for graphics by File Name." & return
  3277. end FileName
  3278.  
  3279. function FileNameField
  3280. return "Each graphic file is stored referred to in this stack is stored as a separate file. The name of this file is displayed in the File Name field." & return
  3281. end FileNameField
  3282.  
  3283. function List
  3284. return "The List field displays the open list. Click an entry in the list to go to that graphic." & return
  3285. end List
  3286.  
  3287. function AppearsInBooks
  3288. return "Click Appears In Books as a short-cut to clicking Find and searching for graphics by book." & return
  3289. end AppearsInBooks
  3290.  
  3291. function AppearsInBooksField
  3292. return "The Appears in Books field displays the books (along with the books‚Äô Engineering Part Numbers) in which this graphic appears." & return &return &"Click any of the books (or Engineering Part Numbers) to search forward for graphics from that book. To search backwards, hold down the Option key." & return
  3293. end AppearsInBooksField
  3294.  
  3295. function Keywords
  3296. return "Click Keywords as a short-cut to clicking Find and searching for graphics by keyword." & return &return &return
  3297. end Keywords
  3298.  
  3299. function KeywordsField
  3300. return "The Keywords field displays the keywords assigned to describe this graphic." & return &return &"Click any of the keywords to search forward for graphics with that keyword. To search backwards, hold down the Option key." & return &return
  3301. end KeywordsField
  3302.  
  3303. function Description
  3304. return "Click Description as a short-cut to clicking Find and searching for graphics by description." & return
  3305. end Description
  3306.  
  3307. function DescriptionField
  3308. return "The Description field displays the description of this graphic." & return &return &"Click this field to search forward for graphics with the same description as the current graphic. To search backwards, hold down the Option key." & return
  3309. end DescriptionField
  3310.  
  3311. function Format
  3312. return "Click Format as a short-cut to clicking Find and searching for graphics by format." & return
  3313. end Format
  3314.  
  3315. function FormatField
  3316. return "The Format field displays the file format (or file type) of this graphic. " & return &return &"Click this field to search forward for graphics that are stored in the same format as the current graphic. To search backwards, hold down the Option key." & return
  3317. end FormatField
  3318.  
  3319. function AddThisGraphic
  3320. return "Add This Graphic puts the description and file name of the current graphic at the end of the open list. You can add up to 50 graphics to a list. As a short-cut to clicking this button, press control-A." & return &return &"You can continue to add graphics to the list, even if the list is hidden  (as it is when information about the current graphic is visible)." & return
  3321. end AddThisGraphic
  3322.  
  3323. function OpenList
  3324. return "Open List enables you to open a list you have saved.  If another list is already open, the stack closes it " & return &"(after prompting you to save changes) before opening the specified list. Only one list can be open at a time." & return
  3325. end OpenList
  3326.  
  3327. function CatalogVolume
  3328. return "Choose Catalog Volume to catalog all of the graphics on a volume (or disk). For each graphic found on the volume, a card is created in the" & return &" stack, the thumbnail is created, and the file name, file type, and file path are put into the appropriate fields." & return
  3329. end CatalogVolume
  3330.  
  3331. function CatalogFolder
  3332. return "Choose Catalog Folder to catalog all of the within a specified folder. For each graphic found in the folder, a card is created in the" & return &" stack, a thumbnail is created, and the file name, file type, and file path are put into the appropriate fields." & return
  3333. end CatalogFolder
  3334.  
  3335. function CatalogFile
  3336. return "Choose Catalog File to catalog a specified file. If the file is stored in an acceptable file format, a card is created in the stack, a thumbnail is " & return &"created, and the file name, file type, and file path are put into the appropriate fields." & return
  3337. end CatalogFile
  3338.  
  3339. function SetBrowsingSpeed
  3340. return "Set Browsing Speed lets you change the speed of browsing and searching through graphics.  " & return
  3341. end SetBrowsingSpeed
  3342.  
  3343. function ImportData
  3344. return "Import Data allows you to add the graphics and text from a specified stack to the end of the open stack." & return
  3345. end ImportData
  3346.  
  3347. function SortbyFileName
  3348. return "Sort by File Name sorts the graphic cards by their file name." & return
  3349. end SortbyFileName
  3350.  
  3351. function DeleteData
  3352. return "Delete Data deletes all but one of the cards in the background The Collection. On the remaining card, the thumbnail is removed and the fields are emptied." & return
  3353. end DeleteData
  3354.  
  3355. function BuildKeywordIndex
  3356. return "Build Keyword Index goes to every graphics card and collects all of the assigned keywords. The keywords are sorted and stored on the Title Card." & return
  3357. end BuildKeywordIndex
  3358.  
  3359. function BuildBookIndex
  3360. return "Build Book Index goes to every graphics card and collects all of the assigned books. The books are sorted and stored on the Title Card." & return
  3361. end BuildBookIndex
  3362.  
  3363. function AddtoKeywordIndex
  3364. return "Add to Keyword Index allows you to add new keywords to the Keyword Index." & return
  3365. end AddtoKeywordIndex
  3366.  
  3367. function DeleteKeyword
  3368. return "Delete Keyword enables you to delete a keyword from the current card." & return
  3369. end DeleteKeyword
  3370.  
  3371. function DeleteBook
  3372. return "Delete Book enables you to delete a book from the current card." & return
  3373. end DeleteBook
  3374.  
  3375. function DeletefromKeywordIndex
  3376. return "Delete from Keyword Index enables you to delete a term from this index. After you select a term or terms, the stack finds each instance in the appropriate field" & return &" and confirms that you want to delete this term from this card. (To avoid the confirmation dialog box, hold down the Option key.)" & return
  3377. end DeletefromKeywordIndex
  3378.  
  3379. function AddtoBookIndex
  3380. return "Add to Book Index allows you to add new books to the Book Index." & return
  3381. end AddtoBookIndex
  3382.  
  3383. function DeletefromBookIndex
  3384. return "Delete from Book Index enables you to delete a term from this index. After you select a term or terms, the stack finds each instance in the appropriate field" & return &" and confirms that you want to delete this term from this card. (To avoid the confirmation dialog box, hold down the Option key.)" & return &return
  3385. end DeletefromBookIndex
  3386.  
  3387. function ExportKeywordIndex
  3388. return "Export Keyword Index creates a text file of all keywords assigned to graphics." & return
  3389. end ExportKeywordIndex
  3390.  
  3391. function ExportBookIndex
  3392. return "Export Book Index creates a text file of all books assigned to graphics." & return
  3393. end ExportBookIndex
  3394.  
  3395. function Next
  3396. return "This is the Next Card button. Click it to see the next card in the stack, or click and hold down the mouse button to browse through the cards." & return &return &"To change the browsing speed of the stack, hold down the Command key and click the Next Card button or the Previous Card button." & return
  3397. end Next
  3398.  
  3399. function Prev
  3400. return "This is the Previous Card button. Click it to see the previous card in the stack, or click and hold down the mouse button to browse through the cards. " & return &return &"To change the browsing speed of the stack, hold down the Command key and click the Next Card button or the Previous Card button." & return &return
  3401. end Prev
  3402.  
  3403. function OpenGraphic
  3404. return "Click Open Graphic to see the original (full-size) version of the graphic on the current card." & return &return &"Once the original grahic is open, you can copy or print all, or a selection of, the graphic." & return
  3405. end OpenGraphic
  3406.  
  3407. function Banner
  3408. return return &"    Welcome to the Help Section" & return &return &"‚Ä¢  Use the Help cursor (the question" & return &"    mark) to click buttons and fields" & return &"    to find out about them." & return &return &"‚Ä¢  To leave Help and return to the " & return &"     graphics, click the close box " & return &"     of this panel." & return &return
  3409. end Banner
  3410.  
  3411. function HelpSection
  3412. return return &"    Welcome to the Help Section" & return &return &"‚Ä¢  Use the Help cursor (the question" & return &"    mark) to click buttons and fields" & return &"    to find out about them." & return &return &"‚Ä¢  To leave Help and return to the " & return &"     graphics, click the close box " & return &"     of this panel." & return &return
  3413. end HelpSection
  3414.  
  3415. function BuildThumbnail
  3416. return "Build Thumbnail replaces any existing thumbnail sketch on the current card and pastes a new thumbnail sketch." & return
  3417. end BuildThumbnail
  3418.  
  3419.  
  3420. return "Build Thumbnail replaces any existing thumbnail sketch on the current card and pastes a new thumbnail sketch." & return
  3421. end BuildThumbnail
  3422.  
  3423. function GoBack
  3424. return "Click Go Back to return to cards you‚Äôve previously been to." & return
  3425. end GoBack
  3426.  
  3427. function Hardware
  3428. return "Apple Graphics Source is divided into three stacks: Hardware, Networks, and Technical. Click one of these buttons to go to that stack." & return
  3429. end Hardware
  3430.  
  3431. function Networks
  3432. return "Apple Graphics Source is divided into three stacks: Hardware, Networks, and Technical. Click one of these buttons to go to that stack." & return
  3433. end Networks
  3434.  
  3435. function Technical
  3436. return "Apple Graphics Source is divided into three stacks: Hardware, Networks, and Technical. Click one of these buttons to go to that stack." & return
  3437. end Technical
  3438.  
  3439. function AboutThisGraphic
  3440. return "About This Graphic displays information about the current graphic (for example, it‚Äôs description, file name, keywords, etc.). " & return
  3441. end AboutThisGraphic
  3442.  
  3443. function AGSLists
  3444. return "AGS Lists displays the open list and hides information about the current graphic." & return &return &"To add graphics to the open list, click Add This Graphic. To save a list, click Save. To go to a graphic in the list, click its entry in the list." & return
  3445. end AGSLists
  3446.  
  3447. function AssignKeyword
  3448. return "Assign Keyword enables you to select an existing keyword or keywords to assign to the current graphic." & return
  3449. end AssignKeyword
  3450.  
  3451. function AssignBook
  3452. return "Assign Book enables you to select an existing book to assign to the current graphic." & return
  3453. end AssignBook
  3454.  
  3455. function CardNumberBtn
  3456. return "This button gives you information about your location in the stack. Click it as a short-cut to using Find to locate a card by its number." & return
  3457. end CardNumberBtn
  3458.  
  3459. function Quit
  3460. return "Quit closes the stack and leaves HyperCard." & return
  3461. end Quit
  3462.  
  3463. function Find
  3464. return "Click Find to search for graphics by different criteria (for example, File Name, Format, Keywords, etc.)" & return
  3465. end Find
  3466.  
  3467. function FindAgain
  3468. return "Click Find Again to continue with your last search." & return
  3469. end FindAgain
  3470.  
  3471. function BuildAllIndexes
  3472. return "Choose Build All Indexes to build all of the indexes in the stack." & return
  3473. end BuildAllIndexes
  3474.  
  3475. function BuildFileNameIndex
  3476. return "Choose Build File Name Index to store all of the file names in an index. This needs to be done before you release the stack." & return
  3477. end BuildFileNameIndex
  3478.  
  3479. function BuildFileFormatIndex
  3480. return "Choose Build File Format Index to store all of the file formats in an index. This needs to be done before you release the stack." & return
  3481. end BuildFileFormatIndex
  3482.  
  3483. function FormatDescription
  3484. return "Choose Format Description to format the text in the description field. Formatting in this case means to put the first 31 characters followed by an ellipsis into the first" & return &"(visible) of the field. The entire description is stored in the rest of the field." & return
  3485. end FormatDescription
  3486.  
  3487. function Delete
  3488. return "Click Delete #  to delete entries from the open list." & return &return &"After you click Delete #,click on the list entries you want to remove. When you are finished deleting entries, click Done." & return
  3489. end Delete
  3490.  
  3491. function NewList
  3492. return "New List opens a new, empty list named Untitled.  If another list is already open, the stack closes it " & return &"(after prompting you to save changes) before opening a new list. Only one list can be open at a time." & return &return &"To add items to the list, click Add This Graphic to List (or press control-A). " & return
  3493. end NewList
  3494.  
  3495. function ListName
  3496. return "This is the name of the open list." & return
  3497. end ListName
  3498.  
  3499. function DeleteList
  3500. return "Delete List erases the list that you specify. Click Delete List when you no longer need a particular list." & return
  3501. end DeleteList
  3502.  
  3503. function PrintList
  3504. return "Print List prints the open list. You can print a list along with the thumbnail sketches of the list items, or print just the text of the list (the descriptions and file name of the items)." & return
  3505. end PrintList
  3506.  
  3507. function Save
  3508. return "Save saves a list to disk." & return
  3509. end Save
  3510.  
  3511. function FileName
  3512. return "Click File Name as a short-cut to clicking Find and searching for graphics by File Name." & return
  3513. end FileName
  3514.  
  3515. function FileNameField
  3516. return "Each graphic file is stored referred to in this stack is stored as a separate file. The name of this file is displayed in the File Name field." & return
  3517. end FileNameField
  3518.  
  3519. function List
  3520. return "The List field displays the open list. Click an entry in the list to go to that graphic." & return
  3521. end List
  3522.  
  3523. function AppearsInBooks
  3524. return "Click Appears In Books as a short-cut to clicking Find and searching for graphics by book." & return
  3525. end AppearsInBooks
  3526.  
  3527. function AppearsInBooksField
  3528. return "The Appears in Books field displays the books (along with the books‚Äô Engineering Part Numbers) in which this graphic appears." & return &return &"Click any of the books (or Engineering Part Numbers) to search forward for graphics from that book. To search backwards, hold down the Option key." & return
  3529. end AppearsInBooksField
  3530.  
  3531. function Keywords
  3532. return "Click Keywords as a short-cut to clicking Find and searching for graphics by keyword." & return &return &return
  3533. end Keywords
  3534.  
  3535. function KeywordsField
  3536. return "The Keywords field displays the keywords assigned to describe this graphic." & return &return &"Click any of the keywords to search forward for graphics with that keyword. To search backwards, hold down the Option key." & return &return
  3537. end KeywordsField
  3538.  
  3539. function Description
  3540. return "Click Description as a short-cut to clicking Find and searching for graphics by description." & return
  3541. end Description
  3542.  
  3543. function DescriptionField
  3544. return "The Description field displays the description of this graphic." & return &return &"Click this field to search forward for graphics with the same description as the current graphic. To search backwards, hold down the Option key." & return
  3545. end DescriptionField
  3546.  
  3547. function Format
  3548. return "Click Format as a short-cut to clicking Find and searching for graphics by format." & return
  3549. end Format
  3550.  
  3551. function FormatField
  3552. return "The Format field displays the file format (or file type) of this graphic. " & return &return &"Click this field to search forward for graphics that are stored in the same format as the current graphic. To search backwards, hold down the Option key." & return
  3553. end FormatField
  3554.  
  3555. function AddThisGraphic
  3556. return "Add This Graphic puts the description and file name of the current graphic at the end of the open list. You can add up to 50 graphics to a list. As a short-cut to clicking this button, press control-A." & return &return &"You can continue to add graphics to the list, even if the list is hidden  (as it is when information about the current graphic is visible)." & return
  3557. end AddThisGraphic
  3558.  
  3559. function OpenList
  3560. return "Open List enables you to open a list you have saved.  If another list is already open, the stack closes it " & return &"(after prompting you to save changes) before opening the specified list. Only one list can be open at a time." & return
  3561. end OpenList
  3562.  
  3563. function CatalogVolume
  3564. return "Choose Catalog Volume to catalog all of the graphics on a volume (or disk). For each graphic found on the volume, a card is created in the" & return &" stack, the thumbnail is created, and the file name, file type, and file path are put into the appropriate fields." & return
  3565. end CatalogVolume
  3566.  
  3567. function CatalogFolder
  3568. return "Choose Catalog Folder to catalog all of the within a specified folder. For each graphic found in the folder, a card is created in the" & return &" stack, a thumbnail is created, and the file name, file type, and file path are put into the appropriate fields." & return
  3569. end CatalogFolder
  3570.  
  3571. function CatalogFile
  3572. return "Choose Catalog File to catalog a specified file. If the file is stored in an acceptable file format, a card is created in the stack, a thumbnail is " & return &"created, and the file name, file type, and file path are put into the appropriate fields." & return
  3573. end CatalogFile
  3574.  
  3575. function SetBrowsingSpeed
  3576. return "Set Browsing Speed lets you change the speed of browsing and searching through graphics.  " & return
  3577. end SetBrowsingSpeed
  3578.  
  3579. function ImportData
  3580. return "Import Data allows you to add the graphics and text from a specified stack to the end of the open stack." & return
  3581. end ImportData
  3582.  
  3583. function SortbyFileName
  3584. return "Sort by File Name sorts the graphic cards by their file name." & return
  3585. end SortbyFileName
  3586.  
  3587. function DeleteData
  3588. return "Delete Data deletes all but one of the cards in the background The Collection. On the remaining card, the thumbnail is removed and the fields are emptied." & return
  3589. end DeleteData
  3590.  
  3591. function BuildKeywordIndex
  3592. return "Build Keyword Index goes to every graphics card and collects all of the assigned keywords. The keywords are sorted and stored on the Title Card." & return
  3593. end BuildKeywordIndex
  3594.  
  3595. function BuildBookIndex
  3596. return "Build Book Index goes to every graphics card and collects all of the assigned books. The books are sorted and stored on the Title Card." & return
  3597. end BuildBookIndex
  3598.  
  3599. function AddtoKeywordIndex
  3600. return "Add to Keyword Index allows you to add new keywords to the Keyword Index." & return
  3601. end AddtoKeywordIndex
  3602.  
  3603. function DeleteKeyword
  3604. return "Delete Keyword enables you to delete a keyword from the current card." & return
  3605. end DeleteKeyword
  3606.  
  3607. function DeleteBook
  3608. return "Delete Book enables you to delete a book from the current card." & return
  3609. end DeleteBook
  3610.  
  3611. function DeletefromKeywordIndex
  3612. return "Delete from Keyword Index enables you to delete a term from this index. After you select a term or terms, the stack finds each instance in the appropriate field" & return &" and confirms that you want to delete this term from this card. (To avoid the confirmation dialog box, hold down the Option key.)" & return
  3613. end DeletefromKeywordIndex
  3614.  
  3615. function AddtoBookIndex
  3616. return "Add to Book Index allows you to add new books to the Book Index." & return
  3617. end AddtoBookIndex
  3618.  
  3619. function DeletefromBookIndex
  3620. return "Delete from Book Index enables you to delete a term from this index. After you select a term or terms, the stack finds each instance in the appropriate field" & return &" and confirms that you want to delete this term from this card. (To avoid the confirmation dialog box, hold down the Option key.)" & return &return
  3621. end DeletefromBookIndex
  3622.  
  3623. function ExportKeywordIndex
  3624. return "Export Keyword Index creates a text file of all keywords assigned to graphics." & return
  3625. end ExportKeywordIndex
  3626.  
  3627. function ExportBookIndex
  3628. return "Export Book Index creates a text file of all books assigned to graphics." & return
  3629. end ExportBookIndex
  3630.  
  3631. function Next
  3632. return "This is the Next Card button. Click it to see the next card in the stack, or click and hold down the mouse button to browse through the cards." & return &return &"To change the browsing speed of the stack, hold down the Command key and click the Next Card button or the Previous Card button." & return
  3633. end Next
  3634.  
  3635. function Prev
  3636. return "This is the Previous Card button. Click it to see the previous card in the stack, or click and hold down the mouse button to browse through the cards. " & return &return &"To change the browsing speed of the stack, hold down the Command key and click the Next Card button or the Previous Card button." & return &return
  3637. end Prev
  3638.  
  3639. function OpenGraphic
  3640. return "Click Open Graphic to see the original (full-size) version of the graphic on the current card." & return &return &"Once the original grahic is open, you can copy or print all, or a selection of, the graphic." & return
  3641. end OpenGraphic
  3642.  
  3643. function Banner
  3644. return return &"    Welcome to the Help Section" & return &return &"‚Ä¢  Use the Help cursor (the question" & return &"    mark) to click buttons and fields" & return &"    to find out about them." & return &return &"‚Ä¢  To leave Help and return to the " & return &"     graphics, click the close box " & return &"     of this panel." & return &return
  3645. end Banner
  3646.  
  3647. function HelpSection
  3648. return return &"    Welcome to the Help Section" & return &return &"‚Ä¢  Use the Help cursor (the question" & return &"    mark) to click buttons and fields" & return &"    to find out about them." & return &return &"‚Ä¢  To leave Help and return to the " & return &"     graphics, click the close box " & return &"     of this panel." & return &return
  3649. end HelpSection
  3650.  
  3651.  
  3652.  
  3653.